gpt4 book ai didi

oop - 什么叫 OOP 相当于 "referential transparency"?

转载 作者:行者123 更新时间:2023-12-04 00:18:24 25 4
gpt4 key购买 nike

我的理解是,术语“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() 期间不会改变, 那么“面向对象”的风格就等价于函数形式 if function overloading支持,因为它可以重写为:
i = foo(obj, n, m);
// return value depends only on obj, n, m

但是,对于 obj 的状态来说是很常见的。改变方法调用,所以我不确定这是否有助于分析......

最佳答案

您的错误是认为 FP 和 OO 在某种程度上是根本不同的。参照透明的“OO 版本”只是参照透明。

一个表达式 e当且仅当 e 是引用透明的可以用它的评估结果替换而不影响程序的行为。

所以如果你有一个表达式 o.foo(a) ,那么如果您可以修改代码以将其替换为调用结果,而不改变程序的行为方式,那么它是引用透明的。显然,如果 o.foo 是无效的,你就不能这样做。如果它修改了 o 的内部状态,则同上。 .所以o.foo(a)的唯一方法|如果其结果是 o 的函数,则要具有引用透明性。和 a .

在我看来,“功能代码”是“引用透明代码”的同义词。

关于oop - 什么叫 OOP 相当于 "referential transparency"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com