谁能帮我理解这个Pig Latin迭代在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",它返回"ananabay"。但是如果我遍历字符串中的每个字符,那么最后一个迭代的元音不应该是新单词Pig拉丁单词产生的元音吗?

换句话说,"香蕉"背后的原因是什么?返回"ananabay"而不是返回"abananay"?

换句话说,"香蕉"背后的原因是什么?返回"ananabay"而不是返回"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"是元音吗?,则block求值。让我们看看上面写了什么:

return word[i..-1] + word[0...i] + "ay"
  • word[1..-1]表示从第二个字母开始的所有内容word,直到,包括最后一个字母,即"anana"
  • word[0...1]的意思是从首字母开始的一切word中,以为限,但不包括第二个字母。也就是说,只有第一个字母:"b"
  • 将它们连接在一起,得到:"anana" + "b" + "ay",即"ananabay"

最新更新