[Pure] 除了对代码合约“没有明显的副作用”之外,是否有任何其他影响
本文关键字:副作用 之外 影响 其他 任何 是否 代码 Pure | 更新日期: 2023-09-27 18:36:03
PureAttribute 文档说:
指示类型或方法是纯的,即它不进行任何可见的状态更改
-
这是Microsoft代码合约中纯函数的唯一要求吗?
-
并且;这个模型是否假设异常是结果(而不是副作用)?
我问是因为,在更一般的上下文中,纯函数也意味着输出仅依赖于输入;即它不能是 I/O 或随机函数的结果。
有人可能还会争辩说,纯函数总是为外部表达式产生一个值,这可能与异常相反。
如果[Pure]确实仅限于限制较少的形式,是否有等同于"[FunctionalPure]"?
静态分析器假设连续两次使用相同的参数调用相同的纯函数会产生相同的结果。
鉴于
[Pure]
public delegate int F(int i);
public class A
{
public void f(F f)
{
var i = f(1);
Contract.Assert(i == f(1));
}
}
生成警告:"建议的假设:可以证明的假设:考虑将其更改为断言。
因此,例如DateTime.Now
不得使用 Pure
属性进行标注。
至于例外,似乎没有什么不允许它们,也没有要求它们被一致地抛出。一般来说,不可能有。您始终可以为几乎任何代码获取OutOfMemoryException
,甚至是具有与以前成功的相同参数的纯函数。