You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:09:03