2011-06-22 3 views
0

есть способ использовать метод космического корабля и магический метод method_missing в одном классе? Ниже пример дает мне undefined method '<' всякий раз, когда я пытаюсь foo1 < foo2 с Definiton как:«def <=>» против «def method_missing»

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

метод_missing не имеет отношения к вопросу. – gtd

+0

так верно - работал слишком долго и не видел очевидного;) – pagid

ответ

6

короткий ответ:

Вы пропустили эту строку кода в Foo:

include Comparable 

длинный ответ:

Вы не получите <, >, <= и т. Д., Просто переопределив оператор космического корабля.

Вы получаете эти методы, включая Comparable. Эти методы затем используют оператора космического корабля для обеспечения действительного ответа.

Это более или менее то, что происходит с Enumerable:

включить модуль, реализовать метод each, а затем получить все другие методы (map, select и т.д.) для «бесплатно».

1

Я не уверен, я понимаю, что ваш вопрос. Для создаваемых методов < и> введите include Comparable в определение класса и определите метод экземпляра < =>.

Смежные вопросы