【发布时间】:2017-02-06 18:28:08
【问题描述】:
问题在于以下代码:
#write your code here
def translate phrase
phrase = phrase.downcase.split(/ /)
phrase.collect! do |word|
word = word.split(//)
switched = false
while switched == false
word.each_index do |letter|
if word[letter] == ("a" || "e" || "i" || "o" || "u")
switched = true
word = (word[letter..-1] + word[0..(letter-1)]).join + "ay"
end
end
end
end
return phrase.join(" ")
end
puts translate("chocolate cream")
#Should return "ocolatechay eamcray"
当我运行它时,Ruby 只返回一个空行。因此,为了解决问题,我将定义加载到 repl 中。 repl 返回以下错误:
NoMethodError: undefined method `downcase' for #<RubyVM::InstructionSequence:0x000000016e8f88>
from /home/adc/odin-project/web-development-101/21-ruby-tdd/ruby_tdd_project/learn_ruby/04_pig_latin/pig_latin.rb:3:in `translate'
from /home/adc/.rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
如果我从代码中删除 downcase,我会收到相同的错误消息,只是这次是 split。
这里有什么问题? (我非常有信心 downcase 和 split 不是问题。)
【问题讨论】:
-
phrase来自哪里?正如您在错误消息中看到的,它不是字符串而是RubyVM::InstructionSequence -
phrase只是translate方法的一个参数。我尝试将phrase定义为 repl 中的字符串,但这没有帮助。
标签: ruby