我正在解决基本的训练练习而且我被卡住了。我必须将每个单词的第一个字母移到它的末尾,然后在单词的末尾添加“ay”。。我一直在谷歌搜索并提出这个代码:
def pig_it translate_pig_latin
move_letters = text.split(' ')
.each do {|x| x[1..-1] << x.[0] << 'ay' }
move_letters.join(' ')
end
但由于某种原因,它给了我这个错误
-e:4:语法错误,意外'|',期待'}' .each做{| x | x [1 ..- 1]&lt;&lt; X [0] &LT;&LT; 'ay'}
我知道这是.each
方法的一个问题,但在阅读完文档并在谷歌上搜索后,我无法弄清楚它有什么问题。
答案 0 :(得分:1)
使用 do
... end
或 {
... }
。不要像你一样将它们与do {
混合使用。该行应如下所示:
.each { |x| x[1..-1] << x[0] << 'ay' }
或
.each do |x| x[1..-1] << x[0] << 'ay' end
从样式的角度来看,大多数Rubyists更喜欢将{
... }
用于单行块,并为跨越的块保留do
... end
多行代码。
答案 1 :(得分:1)
def translate_pig_latin(text)
move_letters = text.split(' ')
.each { |x| return x[1..-1] << x[0] << 'ay' }
move_letters.join(' ')
end
一些注意事项 -
do
/ end
和{}
.
x.[0]
.each
区块正在执行正确的操作(当您遵守上述注释时)但未返回结果(我感到困惑)。如果您添加明确的return
,那么您的代码将按上述方式运作如果这可以帮助您更好地了解正在发生的事情,那么这是一种更为精简的方法
def translate_pig_latin(text)
# create array to contain piglatinified phrase
new_phrase = []
# each word of the original phrase do
text.split(' ').each do |x|
# grab the characters after the first character
new_word = x[1..-1]
# add the first character plus 'ay' to the end of the string
new_word << x[0] + 'ay'
# add the newly piglatinified string to the phrase
new_phrase << new_word
end
# turn the phrase into a space separated string
new_phrase.join(' ')
end