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"
。