【问题标题】:"undefined method for integer" running a custom method in Ruby在 Ruby 中运行自定义方法的“整数的未定义方法”
【发布时间】:2021-11-16 03:07:20
【问题描述】:

我正在尝试调用我之前在代码中定义的方法,它给了我这个错误:

"undefined method `filter' for 0:Integer (NoMethodError)"

这是代码:

def descending_order(n)

  @arrNum = n.to_s.chars.map {|i| i.to_i }
  @final = [@arrNum[0]]
  
  def self.filter(arr, ind)
    if self > arr[ind]
      @final.insert(ind, self)
    else
      self.filter(arr, ind+1)
    end
  end
  
  @arrNum.each { |i| i.filter(@final, 0) }
  
  return @final
    
end

我尝试了我能想到的一切!谢谢

【问题讨论】:

  • i.filter(@final, 0)i 是一个没有filter 方法的数字。
  • 顺便说一句,Ruby 没有嵌套方法。您应该避免在另一种方法中定义一种方法。 (除非你在做元编程)
  • filter是数组方法,select的别名apidock.com/ruby/Array/filter
  • 哈哈,好的!我应该命名不同的方法。谢谢!

标签: ruby methods undefined


【解决方案1】:

你的方法是错误的!

如果您的意图是返回一个给定数字的反向排序数组,那么代码 sn-p 应该是:

def descending_order(n)
  n.digits.sort.reverse
end

上面的 sn -p 返回以下输出

puts descending_order(352614)

=> [6, 5, 4, 3, 2, 1]

【讨论】:

  • 或者提出一个替代方案,我们可以通过简单地反向排序来跳过对#reverse的调用。 n.digits.sort { |a, b| b <=> a }
  • 呃,谢谢。我不知道排序方法
猜你喜欢
  • 1970-01-01
  • 2019-12-25
  • 2010-10-15
  • 1970-01-01
  • 2021-08-05
  • 2019-02-21
  • 1970-01-01
  • 2015-10-11
  • 2016-06-30
相关资源
最近更新 更多