Ужасность названия вопроса — это то, что я пытаюсь решить. Пример:
в 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
? Как это понять?