Документы типа утки с несколькими методами во дворе - PullRequest
6 голосов
/ 03 февраля 2012

YARD позволяет мне указывать типы для параметров метода и возвращаемых значений.Так как мне действительно нравится duck type, приятно видеть, что YARD также поддерживает определение типов путем указания методов, которые они должны поддерживать.

Как вы можете видеть здесь , выражения типа

#first_method, #second_method
интерпретируютсякак логическое разделение.Это означает, что объект должен поддерживать #first_method или #second_method или оба.Это не то, что мне нужно.

Я бы хотел иметь возможность указать, что объект должен поддерживать как #first_method, так и #second_method для моего параметра.Есть ли способ указать это?

1 Ответ

7 голосов
/ 03 февраля 2012

Нет синтаксиса idiomatic для указания составного интерфейса типа утки. Тем не менее, обратите внимание, что все спецификации типов на самом деле являются просто текстом произвольной формы ; ссылка синтаксического анализатора типов YARD, приведенная в вопросе, является просто набором обычных или идиоматических синтаксисов для определения общих интерфейсов. Если вы думаете об умном способе определения этих типов (и это имеет смысл для ваших пользователей), вы можете это сделать. Возможно, что-то вроде #first#second может работать или #first&#second.

Однако я рекомендую создать конкретный тип для переноса этого специального интерфейса. Даже если вы на самом деле не используете тип во время выполнения, он будет служить объектом в вашем домене для объяснения интерфейса вашим пользователям. Например, создав class Foo с двумя методами #first и #second, а затем задокументировав эти два метода, вы теперь можете использовать Foo в качестве типа. В документации класса Foo вы могли бы объяснить, что он никогда не используется в коде и просто существует как «интерфейс», если это так. Вы также можете сделать Foo «модулем» для обозначения того, что это скорее «интерфейс» (или «протокол», если вы предпочитаете этот язык), чем конкретный тип.

...