如何在Ruby中的方法中实现for循环
我的任务是创建一个如何在Ruby中的方法中实现for循环,ruby,Ruby,我的任务是创建一个pig\u-latin方法 猪拉丁语是一种虚构的儿童语言,旨在 令人困惑它遵守一些简单的规则(如下),但是当它被说出来的时候 很快,这对非儿童(和非本地人)来说真的很难 发言人)理解 规则1:如果一个单词以元音开头,则在其后面加上“ay”音 这个词的结尾 规则2:如果一个单词以辅音开头,把它移到结尾 然后在单词的末尾加上一个“是”音 (还有一些关于边缘情况的规则,还有一些区域性的规则 也有变体,但这应该足以理解测试。) 我所有的考试都通过了,除了一个,翻译了很多单词 这是我的错
pig\u-latin
方法
猪拉丁语是一种虚构的儿童语言,旨在
令人困惑它遵守一些简单的规则(如下),但是当它被说出来的时候
很快,这对非儿童(和非本地人)来说真的很难
发言人)理解
规则1:如果一个单词以元音开头,则在其后面加上“ay”音
这个词的结尾
规则2:如果一个单词以辅音开头,把它移到结尾
然后在单词的末尾加上一个“是”音
(还有一些关于边缘情况的规则,还有一些区域性的规则
也有变体,但这应该足以理解测试。)
我所有的考试都通过了,除了一个,翻译了很多单词
这是我的错误:
#translate
translates a word beginning with a vowel
translates a word beginning with a consonant
translates a word beginning with two consonants
translates two words
translates a word beginning with three consonants
counts 'sch' as a single phoneme
counts 'qu' as a single phoneme
counts 'qu' as a consonant even when it's preceded by a consonant
translates many words (FAILED - 1)
Failures:
1) #translate translates many words
Failure/Error: expect(s).to eq("ethay ickquay ownbray oxfay")
expected: "ethay ickquay ownbray oxfay"
got: "ethay"
(compared using ==)
# ./spec/04_pig_latin_spec.rb:70:in `block (2 levels) in <top (required)>'
Finished in 0.00236 seconds (files took 0.10848 seconds to load)
9 examples, 1 failure
Failed examples:
rspec ./spec/04_pig_latin_spec.rb:68 # #translate translates many words
我想这会涉及到很多词:
def translates_many_words(str)
str = str.split(' ');
if str.length > 2
str.each do |item|
return begins_with_consonant(item) || word_begins_with_vowel(item)
end
end
end
但事实并非如此。正如@theTinMan所说,
return
-将拒绝下一次迭代,只在第一次迭代中返回第一个值,从我的评论来看,我认为这应该对您有效(对代码的编辑最少):
UPD
此外,我还建议您重构代码,使其更具可读性,这将在将来对您有所帮助。
这种方法的变体是:
def translates_many_words(str)
str = str.split
# line under - is a shortcut from `return nil if str.size <= 2`
# `#size` is more relative to this context if you will count elements of array
return unless str.size > 2
# Now, when we excluded possibility of work with array that have less then 2 elements,
# we can continue with our iteration
str.map do |item|
begins_with_consonant(item) || word_begins_with_vowel(item)
end.join(' ')
end
def翻译多个单词(str)
str=str.split
#-下的行是'return nil if str.size 2'的快捷方式
#现在,当我们排除使用少于2个元素的数组的可能性时,
#我们可以继续我们的迭代
str.map do|item|
_以_辅音(项)开头| |单词_以_元音(项)开头
结束。连接(“”)
结束
正如@theTinMan所说,return
-将拒绝下一次迭代,并在第一次迭代中只返回第一个值,从我的评论来看,我认为这应该适合您(对代码的编辑最少):
UPD
此外,我还建议您重构代码,使其更具可读性,这将在将来对您有所帮助。
这种方法的变体是:
def translates_many_words(str)
str = str.split
# line under - is a shortcut from `return nil if str.size <= 2`
# `#size` is more relative to this context if you will count elements of array
return unless str.size > 2
# Now, when we excluded possibility of work with array that have less then 2 elements,
# we can continue with our iteration
str.map do |item|
begins_with_consonant(item) || word_begins_with_vowel(item)
end.join(' ')
end
def翻译多个单词(str)
str=str.split
#-下的行是'return nil if str.size 2'的快捷方式
#现在,当我们排除使用少于2个元素的数组的可能性时,
#我们可以继续我们的迭代
str.map do|item|
_以_辅音(项)开头| |单词_以_元音(项)开头
结束。连接(“”)
结束
str.each。。。return
将在第一次迭代中返回第一个值,因此迭代不会执行您想要的操作。将所有方法嵌入包装方法中不是惯用做法。首先,要使测试通过-str.map{item}以辅音(item)| |单词以元音(item)开头。加入(“”)
@AlexGolubenko谢谢,朋友!请在上下文中添加您的解决方案或显示您的意思?谢谢你@AntonioPavicevac Ortiz我建议你检查我的答案的UPDstr。。。return
将在第一次迭代中返回第一个值,因此迭代不会执行您想要的操作。将所有方法嵌入包装方法中不是惯用做法。首先,要使测试通过-str.map{item}以辅音(item)| |单词以元音(item)开头。加入(“”)
@AlexGolubenko谢谢,朋友!请在上下文中添加您的解决方案或显示您的意思?谢谢你@AntonioPavicevac Ortiz我建议您检查我的答案代码>在行尾不是必需的,也不是惯用的<代码>拆分(“”)
可以写成split
,因为它的默认行为是在空白处拆分。@theTinMan在你的右边,但是,正如我所说:“在UPD中,你可以看到我的变体”),而不是使用“UPD”或“update”或“edit”,只要在最初包含它的地方添加信息即可。因此,保持对所有问题和答案的修订控制,这样我们就可以看到更改的内容以及需要更改的时间。清晰易读比每周记笔记和更改更重要。代码>在行尾不是必需的,也不是惯用的<代码>拆分(“”)
可以写成split
,因为它的默认行为是在空白处拆分。@theTinMan在你的右边,但是,正如我所说:“在UPD中,你可以看到我的变体”),而不是使用“UPD”或“update”或“edit”,只要在最初包含它的地方添加信息即可。因此,保持对所有问题和答案的修订控制,这样我们就可以看到更改的内容以及需要更改的时间。清晰易读比每周记笔记和改变更重要。
def translates_many_words(str)
str = str.split
# line under - is a shortcut from `return nil if str.size <= 2`
# `#size` is more relative to this context if you will count elements of array
return unless str.size > 2
# Now, when we excluded possibility of work with array that have less then 2 elements,
# we can continue with our iteration
str.map do |item|
begins_with_consonant(item) || word_begins_with_vowel(item)
end.join(' ')
end