我试图创建一个莫尔斯解码器。它用莫尔斯电码代替拉丁字母。字母之间有一个空格,单词之间有三个空格。
def decodeMorse(morseCode)
morse_dict = {
"a" => ".-","b" => "-...","c" => "-.-.","d" => "-..","e" => ".","f" => "..-.","g" => "--.","h" => "....","i" => "..","j" => ".---","k" => "-.-","l" => ".-..","m" => "--","n" => "-.","o" => "---","p" => ".--.","q" => "--.-","r" => ".-.","s" => "...","t" => "-","u" => "..-","v" => "...-","w" => ".--","x" => "-..-","y" => "-.--","z" => "--.."," " => " ","1" => ".----","2" => "..---","3" => "...--","4" => "....-","5" => ".....","6" => "-....","7" => "--...","8" => "---..","9" => "----.","0" => "-----"
}
wordList = morseCode.split(" ")
wordList.each do |word|
word = word.downcase
word.split("").each do |letter|
a = ' ' + morse_dict[letter].to_s + ' '
word.gsub! letter a
end
end
sentence = wordList.join(' ')
return sentence.lstrip
end
puts decodeMorse("Example from description")
然后我得到了这个错误:
NoMethodError: undefined method `letter' for main:Object
from codewars.rb:12:in `block (2 levels) in decodeMorse'
from codewars.rb:10:in `each'
from codewars.rb:10:in `block in decodeMorse'
from codewars.rb:8:in `each'
from codewars.rb:8:in `decodeMorse'
怎么了?
问题在这里:
word.gsub! letter a
因为没有逗号letter
,a
所以将其从右向左进行解释,并将其视为letter(a)
函数调用。你想同时letter
和a
作为参数传递给函数调用⇒他们分开传递用逗号:
# ⇓ HERE
word.gsub! letter, a
顺便说一句,gsub
可能将哈希作为第二个参数进行替换:
word.gsub(/./, morse_dict)
会将所有字母更改为摩尔斯表示。要处理空格,可能gsub
需要一个代码块:
word.gsub(/./) { |l| " #{morse_dict[l]} " }.squeeze(' ')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句