ruby - "b" 的未定义方法 `shift':String (NoMethodError) Ruby
问题描述
尝试运行此将字符串转换为猪拉丁语的方法时,我不断收到相同的错误。
def pig_latin_word(word)
new_arr = []
letter = word.split("")
if letter[0] == "a" || letter[0] == "e" || letter[0] == "i" || letter[0] == "o" ||
letter[0] == "u"
new_arr << "yay"
else
letter[0].shift && new_arr << letter[0].push + "ay"
end
return new_arr.join
end
# Test cases:
puts pig_latin_word("eat") # => "eatyay"
puts pig_latin_word("banana") # => "ananabay"
puts pig_latin_word("trash") # => "ashtray"
解决方案
从我看到的情况来看,您正在尝试转换为字母(字符串)。基本上,每当您执行 letter[0].shift 时,您都会取消引用数组的第一个元素,该元素是一个字符串。Shift 适用于数组。
这是一个代码片段,可以很好地完成您尝试做的事情。根据您发布的代码,只有最后一个测试用例无法返回您建议的值。您说它应该返回“ashtray”,但是如果您移开第一个字母,请将其附加到最后一个字母并添加 ay,您实际上应该得到“rashtay”
def pig_latin_word(word)
return "#{word}yay" if word =~ /^[AEIOUaeiou]/
word_array = word.split('')
latin_word = "#{word_array[0..word_array.length].join}#{word_array.shift}ay"
return latin_word
end
puts pig_latin_word("eat") # => "eatyay"
puts pig_latin_word("banana") # => "ananabay"
puts pig_latin_word("trash") # => "rashtay"
推荐阅读
- node.js - 承诺不解决快递
- python - 如何在python中使用正则表达式从字节中提取单词?
- linux - 错误 [: ==: shell 脚本中需要一元运算符
- android - FlutterPusher 在发布版本中未连接到主机
- raspberry-pi - Linux通过usb串口通信
- angular - Angular 9 - 未定义的属性绑定
- flutter - 从服务类刷新多个视图模型
- django - 引发 QuerytSet:相关字段查找无效:iexact
- javascript - 滚动按钮无法正常工作 Javascript
- javascript - 在导航之前反应回调没有得到更新