ruby - 有人可以帮我理解这个 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 Latin 单词的创建源?
换句话说,“banana”返回“ananabay”而不是返回“abananay”的原因是什么?
解决方案
换句话说,“banana”返回“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"
元音吗?是的,因此该块进行评估。让我们看看它是怎么说的:
return word[i..-1] + word[0...i] + "ay"
word[1..-1]
意思是“从 的第二个字母到最后一个字母的所有内容word
,即."anana"
word[0...1]
意思是“从 的第一个字母到但不包括第二个字母的所有内容。换句话说,只有第一个字母:。word
"b"
- 将它们连接在一起,你会得到:
"anana" + "b" + "ay"
,即"ananabay"
。
推荐阅读
- c# - 正则表达式问题(在 asp.net MVC5 中)
- sql - 按特定年份对列中的所有 - / + 值求和
- scala - Akka TCP 请求响应需要 Thread.sleep
- mysql - 获取两条记录之间的差异
- scripting - 攻击者可以下载 cgi 脚本吗?
- spring - 如何测试 Spring 事件监听器条件 SpEL?
- swift - 将 iOS 上的 Apollo 订阅与后端用于 websocket 的 Action Cable 集成
- c++ - 有没有办法从 double 到 std::array 的隐式转换
? - node.js - RSAES-PKCS1- V1_5 使用 NodeJs 加密的公共加密
- python-3.x - 通过堆叠其对角 K 矩阵来创建一个新的大矩阵