"def <=>" vs. "def method_missing"



有没有办法在一个类中使用太空船方法和神奇的"method_missing"?下面的例子给了我undefined method '<',每当我尝试foo1 < foo2的定义时,比如:

class Foo
  def initialize(params)
    @parent= params[:parent]
  end
  def <=>(o)
     ...
  end
  def method_missing(sym, *args, &block)
    @parent.send sym, *args, &block
  end
end

感谢任何帮助:)

简短回答:

您在Foo:中缺少这行代码

include Comparable

长答案:

仅仅通过重新定义宇宙飞船操作符是无法获得<><=等方法的。

您可以通过包含Comparable来获得这些方法。这些方法然后使用宇宙飞船操作员来提供有效的响应。

Enumerable:或多或少就是这样

包含模块,实现each方法,然后"免费"获得所有其他方法(mapselect等)。

我不确定我是否理解你的问题;和>方法,将include Comparable放入类定义中,并定义<=>实例方法。

相关内容

  • 没有找到相关文章

最新更新