我正在开发一个函数,它可以将句子翻译成pig拉丁语,但是当我输入类似“cherry”的内容时,它会给出“errychay”,只有在我返回newword+block+ay的情况下,如果我把它放进去,我会得到一个空值数组。
以元音开头的单词显然很好用(例如苹果)
def translate(s)
v = %w{a e i o u}
s = s.split.map! do |word|
if v.include? word[0]
word + 'ay'
else
for letter in 0...word.length
block = ''
if !(v.include? word[letter] )
block += word[letter]
else
newWord = word.slice(letter,word.length - 1)
newWord + block + 'ay'
block = ''
break
end
end
end
end
s.join(' ')
结束
3条答案
按热度按时间4si2a6ki1#
问题是
block = ''
在每个迭代的开始时发生for
循环。所以,block一直被重置为''
,导致newWord + '' + 'ay'
这就是你得到的。你可以通过拉出block = ''
所以它只发生一次,在你for
回路:编辑:我忍不住要重构一下你的代码。我主要想提出一种不需要人工操作的方法
break
从循环中退出。诀窍是定义小的辅助函数。zsbz8rwp2#
另一种方法,尽管您仍然需要找到一种方法来处理类似('ch','th'等)的混合
oxiaedzo3#
有三件事,您标识的块=''需要发生在循环之外。另外两个是:
我想你的意思是
newWord + block + 'ay'
返回的值map
打电话,不是。试试这个:运行它: