我正在研究在我们的 Perl 项目中使用 DbC,并且我试图找到在源代码中验证契约(Contract)的最佳方法(例如检查前/后条件、不变量等)

Class::Contract 由 Damian Conway 编写,现在由 C. Garret Goebel 维护,但它看起来已经 8 年多没有被触及了。

看起来我想要使用的是 Moose ,因为它似乎可以提供可用于 DbC 的功能,但我想知道是否有人有任何关于如何进行此操作的资源(文章等),或者如果有任何我找不到的有用模块。

有人用 Perl 做 DbC 吗?我是否应该“跳入”Moose,看看我能为我做什么?

最佳答案

Moose 为您提供了许多工具(如果不是全部的话)来进行 DbC。具体来说,您可以使用 before、after 和 around 方法 Hook ( here's some examples )来执行您可能想要对参数和返回值进行的任何断言。

作为“滚动您自己的 DbC”的替代方法,您可以使用像 MooseX::Method::SignaturesMooseX::Method 这样的模块来验证传递给子程序的参数。然而,这些模块不处理 DbC 通常提供的“后”或“不变”验证。

编辑: 受这个问题的启发,我一起破解了 MooseX::Contract 并将其上传到 CPAN。我很想获得有关 API 的反馈,因为我从未真正直接使用过 DbC。

关于perl - 你如何在 Perl 中进行契约式设计?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/439063/

10-13 02:50