Ruby运行自定义方法报undefined method for integer错误如何解决
错误根因
- 方法归属不匹配:你在
descending_order内部定义的self.filter属于当前上下文对象,而非你调用时使用的Integer类型实例,因此Integer实例找不到filter方法触发报错。 - 递归无终止条件:你写的
filter方法在索引超出数组长度时没有停止逻辑,后续会触发索引越界错误。 - 实例变量使用不当:代码中所有
@开头的实例变量都可以替换为局部变量,实例变量会在方法调用结束后仍保留值,可能引发不必要的副作用。
修复方案
贴合原始思路的实现
如果你希望保留你原本的插入排序逻辑,可以参考如下修改后的代码:
def descending_order(n) arr_num = n.to_s.chars.map { |i| i.to_i } return arr_num if arr_num.size <= 1 final = [arr_num.shift] arr_num.each do |num| ind = 0 # 查找对应的插入位置 while ind < final.size && num <= final[ind] ind += 1 end final.insert(ind, num) end # 如果需要返回数字而不是数组,改为 final.join.to_i 即可 final end
Ruby惯用简洁实现
如果不需要强制用插入排序实现,Ruby原生方法可以一行完成降序排序需求:
def descending_order(n) n.to_s.chars.sort.reverse.join.to_i end
验证示例
调用descending_order(145263),两种实现都会得到符合预期的降序结果654321。
内容的提问来源于stack exchange,提问作者Santiago Rey
相关产品推荐
相关产品推荐

