基础Pig Latin翻译器出现NoMethodError问题求助
解决Ruby Pig Latin翻译器的NoMethodError问题
错误根源
你的代码存在两个核心问题:
- 硬编码了数组索引(
b4pig[0]到b4pig[3]),默认输入短语固定有4个单词。如果输入的单词数少于4,b4pig[3]会返回nil,调用nil.slice就会触发NoMethodError。 - 写法完全不具备扩展性,无法处理任意长度的输入短语。
修正后的代码
def pig_it(text) text.split(" ").map do |word| word[1..-1] + word[0] + "ay" end.join(" ") end
代码逻辑说明
text.split(" "):将输入字符串按空格分割成单词数组,支持任意数量的单词。map遍历每个单词:对每个单词执行转换操作,无需关心数组长度,从根源避免了nil调用方法的问题。word[1..-1]:取单词从第2个字符到末尾的子串,替代原代码中slice+delete的组合,更简洁且不会误删重复字符。word[0]:取单词的首字母。join(" "):将转换后的单词数组重新拼接成空格分隔的字符串。
测试验证
- 输入
'Pig latin is cool',输出'igPay atinlay siay oolcay',符合需求。 - 输入
'This is my string',输出'hisTay siay ymay tringsay',符合需求。 - 输入任意长度短语(如
'Hello world'),可正常转换为'elloHay orldway'。
内容的提问来源于stack exchange,提问作者PieSize
相关产品推荐
相关产品推荐

