0

有没有办法在一个类中使用宇宙飞船方法和魔法“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

任何帮助表示赞赏:)

4

2 回答 2

6

简短的回答:

您在里面缺少这行代码Foo

include Comparable

长答案:

仅通过重新定义 spaceship 运算符,您不会得到<, >,<=等方法。

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

或多或少会发生以下情况Enumerable

您包含模块,实现each方法,然后“免费”获取所有其他方法(map、、select等)。

于 2011-06-22T03:33:27.170 回答
1

我不确定我明白你的问题是什么。对于要创建的 < 和 > 方法,放入 include Comparable您的类定义并定义 <=> 实例方法。

于 2011-06-22T03:04:51.390 回答