是否调用创建一个被认为是纯粹的新对象实例?

时间:2014-01-14 08:13:40

标签: scala functional-programming

在函数式编程术语中,如果我执行:

val a = new Client
val b = new Client

调用上面的构造函数两次被认为是纯函数还是非纯函数?

2 个答案:

答案 0 :(得分:6)

如果你可以用以下两行代替:

val a = new Client
val b = a

在不改变整个程序行为的情况下,对象实例化可以被认为是纯粹的(referential transparency)。

如果Client构造函数具有任何“可观察的”副作用,或者您在程序中使用了标识相等性,它将失败。

答案 1 :(得分:4)

通常,内存分配不被认为是副作用,因此构造函数调用本身被认为是纯粹的。

虽然它最终可能会导致程序内存不足,但这并不是你可以作为程序员真正控制的东西,所以“纯度”通常被认为是在无限内存的假设下。

如果你的构造函数本身有副作用,那么调用它就不会是纯粹的。