YARD 允许我指定方法参数和返回值的类型。因为我真的很喜欢回避类型,所以很高兴看到 YARD 还支持通过指定它们必须支持的方法来定义类型。
正如你在这里看到的,像这样的表达式
#first_method,#second_method被解释为逻辑析取。这意味着对象需要支持#first_method 或#second_method 或两者。这不是我需要的。
我希望能够为我的参数指定一个对象需要同时支持#first_method 和#second_method。有没有办法指定这个?
YARD 允许我指定方法参数和返回值的类型。因为我真的很喜欢回避类型,所以很高兴看到 YARD 还支持通过指定它们必须支持的方法来定义类型。
正如你在这里看到的,像这样的表达式
#first_method,#second_method被解释为逻辑析取。这意味着对象需要支持#first_method 或#second_method 或两者。这不是我需要的。
我希望能够为我的参数指定一个对象需要同时支持#first_method 和#second_method。有没有办法指定这个?
没有用于指定复合鸭类型接口的惯用语法。也就是说,请注意所有类型规范实际上只是自由格式文本;问题中给出的 YARD 类型解析器链接只是一组用于指定通用接口的常规或惯用语法。如果您想到了一种指定这些类型的聪明方法(并且对您的用户有意义),那么您可以自由地这样做。也许类似的东西#first#second
可能会起作用,或者#first&#second
.
然而,我的建议是创建一个具体的类型来包装这个 ad-hoc 接口。即使您实际上并未在运行时中使用该类型,它也会作为您域中的对象来向您的用户解释接口。例如,通过class Foo
使用两个方法创建 a#first
和#second
,然后记录这两个方法,您现在可以Foo
用作您的类型。您可以在 Foo 类文档中解释它从未在代码中实际使用过,并且只是作为“接口”存在,如果是这样的话。您还可以使 Foo 成为“模块”,以表示它更像是“接口”(或“协议”,如果您更喜欢该语言),而不是具体类型。