Ужасность названия вопроса - это то, что я пытаюсь решить. Пример:
в 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»
Точно так же в Руби
(Array.new.methods - Object.new.methods).size # 111
Означает ли это, что для имитации интерфейса Array мне нужно реализовать 111 методов? Ни в коем случае, но как узнать, какие методы являются «сущностью» массива. это просто #[]
, #[]=
и #size
? Как это понять?