PureAttribute文档说:
表示一个类型或方法是纯的,即它不做任何可见的状态改变
这是Microsoft 代码合同中纯函数的唯一要求吗?
和; 这个模型是否假设异常是结果(而不是副作用)?
我问是因为,在更一般的情况下,纯函数 还意味着输出仅取决于输入。IE。它不能是 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
对于几乎任何代码,您总是可以得到一个,即使是一个具有与以前成功的相同参数的纯函数。