latin迭代在ruby中是如何工作的吗?

mitkmikd  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(226)
def pig_latin_word(word)
  vowels = "aeiou"

  if vowels.include?(word[0])
     return word + "yay"
  end

  word.each_char.with_index do |char, i|
    if vowels.include?(char)
      return word[i..-1] + word[0...i] + "ay"
    end
  end
end

关于方法,假设代码接受输入“banana”,它将返回“ananabay”。但是,如果我遍历字符串中的每个字符,那么最后一个迭代的元音不是新的pig拉丁语单词创建的元音吗?
换句话说,“香蕉”返回“阿纳纳贝”而不是返回“阿巴纳尼”的原因是什么?

eagi6jfj

eagi6jfj1#

换句话说,“香蕉”返回“阿纳纳贝”而不是返回“阿巴纳尼”的原因是什么?
让我们一次一行地浏览代码:

if vowels.include?(word[0])

第一个字母是什么 "banana" 元音?不,所以第一个块不计算。

word.each_char.with_index do |char, i|

这是对单词的每个字母的迭代
在第一次迭代中, char = "b"i = 0 .

if vowels.include?(char)

"b" 元音?不,所以块不计算。
下一次迭代。。。现在, char = "a"i = 1 .
"a" 元音?是的,所以块计算。让我们看看它说了什么:

return word[i..-1] + word[0...i] + "ay"
``` `word[1..-1]` 意思是“从 `word` ,直至并包括最后一个字母,即。 `"anana"` . `word[0...1]` 意思是“从第一个字母开始的所有内容” `word` ,但不包括第二个字母。换句话说,只有第一个字母: `"b"` .
将它们连接在一起,您将得到: `"anana" + "b" + "ay"` ,即。 `"ananabay"` .

相关问题