有人可以帮助我了解 Pig Latin 迭代在 Ruby 中的工作原理吗?

Can someone help me understand how this Pig Latin iteration works in Ruby?

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”,returns“ananabay”。但是,如果我遍历字符串中的每个字符,最后一个迭代的元音会不会是新 Pig Latin 单词的来源?

换句话说,“banana”返回“ananabay”而不是返回“abananay”的原因是什么?

In other words, what is the reason behind "banana" returning "ananabay" as opposed to returning "abananay"?

让我们逐行逐行执行代码:

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"