在YARD中使用多种方法记录duck类型

时间:2012-02-03 10:02:23

标签: ruby documentation yard

YARD允许我指定方法参数和返回值的类型。由于我真的喜欢鸭子类型,很高兴看到YARD还支持通过指定必须支持的方法来定义类型。

正如您所见here

#first_method, #second_method
等表达式被解释为逻辑分离。这意味着对象需要支持#first_method或#second_method或两者。这不是我需要的。

我希望能够指定一个对象需要支持#first_method和#second_method作为我的参数。有没有办法指定这个?

1 个答案:

答案 0 :(得分:7)

没有用于指定复合duck-type接口的惯用语法。也就是说,请注意所有类型规范都只是自由格式文本;问题中给出的YARD类型解析器链接只是一组用于指定公共接口的常规或惯用语法。如果您想到一种智能的方式来指定这些类型(并且对您的用户有意义),您可以自由地这样做。也许类似#first#second的内容可能有用,或#first&#second

然而,我的建议是创建一个具体的类型来包装这个ad-hoc接口。即使您实际上使用运行时中的类型,它也会在您的域中充当对象来向用户解释接口。例如,通过使用两种方法class Foo#first创建#second,然后记录这两种方法,您现在可以使用Foo作为类型。您可以在Foo类文档中解释它从未在代码中实际使用过,只是作为“接口”存在,如果是这种情况。您还可以使Foo成为一个“模块”来表示它更像是一个“接口”(或“协议”,如果您更喜欢该语言)而不是具体类型。