我注意到Microsoft在.NET 4中以一种奇怪的方式命名了它们相对于代码契约(Contract)的功能。

它们在“require”和“ensure”的末尾添加“s”,因此存在Contract.Requires()和Contract.Ensures(),但不在“assert”和“assume”的末尾,因此存在Contract .Assert()和Contract.Assume()。差异使我有些困惑。

实际上,我真正的问题是,我正在尝试在PHP中使用代码契约,因此我写了一些东西来模仿.NET 4中的“契约”类。由于PHP没有内置方法可以验证参数类型,我将方法添加到自己的Contract类中以进行一些验证。我选择“期望”一词,是因为当参数类型错误时,“期望参数'bar'为字符串,但...”是常见消息。问题就来了。我应该将方法命名为Contract.Expect()还是应将其命名为Contract.Expects()?

我来自一个不会说英语的国家,对不起我的英语不好。
也许这实际上是一个英语问题,但是我认为只有程序员才能帮助我。如果这个问题在这里不合适,那么对此感到抱歉。

最佳答案

我相信EnsuresRequires在描述需要和/或保证的方法,而AssertAssume是契约(Contract)验证者的命令。

换句话说,前两个描述了有关方法外部接口(interface)的前提条件/后置条件,而后两个只是元数据,可以帮助契约(Contract)验证者在方法内部为您完成工作。一个与用户相关,但另一个与用户无关。

关于.net - 契约(Contract)要求与契约(Contract)要求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5762966/

10-14 11:26