Как найти «основные» методы для обеспечения интерфейса примесей Ruby?

Ужасность названия вопроса — это то, что я пытаюсь решить. Пример:

в Ruby Enumerable — это интерфейс в том смысле, что я могу что-то реализовать и задокументировать как:

def myfancymethod(please_pass_me_an_Enumerable_here)

но с другой стороны, Enumerable — это своего рода расширение интерфейса, в котором #each является это методы. Если у меня есть класс

class Foo
  def each
    :bar
  end
end

Для тех, кто не знаком с Ruby, если вы смешаете модуль Enumerable в классе, вы получите десятки методов, которые полагаются только на метод #eachдля предоставления таких вещей, как #map , #selectи т. д.

Я мог бы сказать, что мой класс Fooявляется Enumerable-способным или Enumerable-совместимым или что? Какие термины описывают ответы на вопросы «Что нужно, чтобы быть Enumerable?», «Ну, у вас должен быть #each»

Аналогично, в Ruby

(Array.new.methods - Object.new.methods).size # 111

Означает ли это, что для имитации интерфейса Array я должен реализовать 111 методов? Ни в коем случае, но как узнать, какие методы являются «сущностью» массива. это просто #[], #[]=и #size? Как это понять?

9
задан ulver 25 May 2012 в 00:13
поделиться