我的理解是,术语“引用透明性”实际上只能应用于功能代码。但是,面向对象代码中对对象的方法调用可以具有类似的属性,即方法的返回值,而方法调用后对象的状态只取决于调用前对象的状态,以及方法的参数。
即功能参考透明度:
i = foo(n, m);
// return value depends only on n, m
OO“参考透明度”:
i = obj.foo(n, m);
// return value, and subsequent state of obj, depends
// only on initial state of obj, n, m
这个属性有名字吗?
如果obj
在调用 的过程中 的状态没有改变,那么如果支持函数重载foo()
,那么“面向对象”样式等价于函数形式,因为它可以重写为:
i = foo(obj, n, m);
// return value depends only on obj, n, m
但是,在方法调用中改变状态是很常见的obj
,所以我不确定这是否有助于分析......