【发布时间】:2011-03-11 20:19:38
【问题描述】:
我的理解是“referential transparency”这个词实际上只能应用于函数式代码。但是,面向对象代码中对对象的方法调用可以具有类似的属性,即方法的返回值,而方法调用后对象的状态只取决于调用前对象的状态,以及方法的参数。
即功能参照透明:
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()的过程中没有改变,那么如果function overloading被支持,那么“面向对象”风格就等价于函数形式,因为它可以被重写为:
i = foo(obj, n, m);
// return value depends only on obj, n, m
但是,obj 的状态在方法调用中发生变化是很常见的,所以我不确定这是否有助于分析...
【问题讨论】:
标签: oop functional-programming referential-transparency