如何用 Perl 进行契约设计?
-
22-07-2019 - |
解决方案
Moose 为您提供了很多执行 DbC 的工具(如果不是全部糖分的话)。具体来说,您可以使用 before、after 和 around 方法挂钩(这是 一些例子)来执行您可能想要对参数和返回值进行的任何断言。
作为“推出自己的 DbC”的替代方案,您可以使用类似的模块 MooseX::方法::签名 或者 MooseX::方法 负责验证传递给子例程的参数。然而,这些模块不处理 DbC 通常提供的“后”或“不变”验证。
编辑: 受这个问题的启发,我一起黑了 MooseX::合约 并将其上传到CPAN。我很想获得有关 API 的反馈,因为我从未真正亲自使用过 DbC。
其他提示
麋为perl的一个极好的OO系统,我尽情地推荐它的任何人以perl的编码对象。你可以为你的类成员的存取或构造设置时将强制指定“亚型”(同一个系统可以与驼鹿::方法包功能使用)。如果要编码不止一个衬垫,使用驼鹿;
至于做DbC的,好了,可能不是perl5的最合适的。这将是很难的,你提供很少保证的语言。就个人而言,在很多动态语言,但特别的perl,我倾向于让我的指导思想干燥,测试驱动开发。
我也建议使用麋。
然而作为“替代”看一看子::合同。
要引用的作者....
子::合同提供实现在Perl由合同范例编程的份实用的方式。
子::合同不是设计逐合同框架。
子::合同旨在使它很容易以限制子程序输入参数,并且为了在运行时以模拟强类型返回值。
如果您不需要类不变,我发现下面的Perl黑客书建议对某些程序很好的解决方案。请参阅 Smart::Comments
。
不隶属于 StackOverflow