【问题标题】:"def <=>" vs. "def method_missing"“def <=>”与“def method_missing”
【发布时间】:2011-06-22 00:22:25
【问题描述】:

有没有办法在一个类中使用宇宙飞船方法和神奇的“method_missing”?每当我尝试foo1 &lt; foo2 时,下面的示例都会给我undefined method '&lt;',其定义如下:

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

任何帮助表示赞赏:)

【问题讨论】:

  • method_missing 与问题无关。
  • 如此真实 - 工作时间过长,没有看到明显的内容;)

标签: ruby ruby-1.9.2


【解决方案1】:

简短回答:

Foo 中缺少这行代码:

include Comparable

长答案:

你不会仅仅通过重新定义 spaceship 运算符得到&lt;&gt;&lt;= 等方法。

您可以通过包含Comparable 来获得这些方法。这些方法然后使用 spaceship 运算符提供有效响应。

Enumerable 或多或少会发生什么:

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

【讨论】:

    【解决方案2】:

    我不确定我是否理解您的问题。对于要创建的 方法,请将 include Comparable 放入您的类定义中并定义 实例方法。

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2018-07-26
      • 2017-03-27
      • 1970-01-01
      • 2022-11-11
      • 2017-11-04
      相关资源
      最近更新 更多