“def< =>”与“def method_missing”

时间:2011-06-22 00:22:26

标签: ruby ruby-1.9.2

有没有办法在一个类中使用太空飞船方法和神奇的“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

任何帮助表示赞赏:)

2 个答案:

答案 0 :(得分:6)

简短回答:

您在Foo

中缺少这行代码
include Comparable

长答案:

仅通过重新定义太空船运营商,您无法获得<><=等方法。

您可以通过加入Comparable来获得这些方法。那些方法然后使用太空船运算符来提供有效的响应。

Enumerable或多或少会发生什么:

您包含该模块,实施each方法,然后获取“免费”的所有其他方法(mapselect等)。

答案 1 :(得分:1)

我不确定我明白你的问题是什么。对于&lt;和&gt;要创建的方法,将include Comparable放入类定义中并定义&lt; =&gt;实例方法。