問題是用下面的代碼:Ruby不能識別`downcase`或`split`作爲定義的方法嗎?
#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"
當我運行此,紅寶石只返回一個空行。所以,爲了解決這個問題,我把定義加載到了repl中。該REPL返回以下錯誤:如果我從我的代碼刪除downcase
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>'
,我得到同樣的錯誤信息,只有這一次split
。
這裏有什麼問題? (我敢確信downcase
和split
是不這個問題。)
'phrase'從哪裏來?正如你在錯誤信息中看到的那樣,它不是一個字符串,而是一個[RubyVM :: InstructionSequence](http://ruby-doc.org/core-2.4.0/RubyVM/InstructionSequence.html) –
'phrase'就是'translate'方法的一個參數。我已經嘗試在repl中將'phrase'定義爲一個字符串,但這沒有幫助。 – adc17