参考透明度是什么意思?我曾听人描述它为“这意味着你可以用等号替换等号”,但这似乎是一个不充分的解释。
当前回答
当我读到被接受的答案时,我以为我在不同的页面上,而不是在stackoverflow上。
引用透明性是定义纯函数的一种更正式的方式。因此,如果一个函数在相同的输入上始终产生相同的结果,那么它就是引用透明的。
let counter=0
function count(){
return counter++
}
这不是引用透明的,因为返回值取决于外部变量“counter”,并且它一直在变化。
这是我们如何使它的参考透明:
function count(counter){
return counter+1
}
现在这个函数是稳定的,并且在提供相同的输入时总是返回相同的输出。
其他回答
编程中的引用透明性指的是,当一个函数提供了一个输入时,它总是会为给定的输入返回相同的值。以下面的示例函数为例。
Int plusFive(int x){
return x+5
}
对于给定的输入整数x,该函数总是返回相同的值。上述函数的输出可以被其返回值所替代,并且代码的操作应该相同。例如,如果x=10,那么代码可以写成:
Int输出= + 5 (10)
OR
Int输出= 15
参考透明度是计算机科学中使用的一个术语。它起源于数学逻辑,但在计算机科学中具有广泛的应用和有效的含义。
它的意思是:可以被其结果替换而不改变其含义的结构(如函数)。
在通常使用中,它与纯表达式相似,但并不完全等效。纯表达式完全由其他纯表达式组成。引用透明表达式可能在内部是不纯的,例如在其计算过程中使用可变状态,但在表达式整体之外没有副作用。
所有纯函数,根据它们的构造,都是指涉透明的,但不一定相反。
许多语言特性都支持不纯引用透明性,比如Haskell中的ST单表,c++中的构造变量和某些lambdas。
有时引用透明性是强制的,而其他时候程序员必须自己保证它。
引用透明性可以简单地表述为:
一个表达式在任何上下文中总是求相同的结果[1], 一个函数,如果给定相同的参数两次,必须产生相同的结果两次。
例如,编程语言Haskell是一种纯函数式语言;这意味着它是引用透明的。
请注意,这个“意义”的概念是发生在观察者头脑中的事情。因此,同样的“参考”对不同的人可能意味着不同的事情。例如,我们在维基百科上有一个爱丁堡消歧页面。
在编程上下文中出现的一个相关问题可能是多态性。
也许我们应该为特殊情况下的多态(或者甚至是强制转换)取一个名字,其中不同的多态情况在语义上是等价的(而不是完全相似)。例如,数字1——可以用整数类型、复杂类型或任何其他类型表示——可以用多态方式处理)。
当我读到被接受的答案时,我以为我在不同的页面上,而不是在stackoverflow上。
引用透明性是定义纯函数的一种更正式的方式。因此,如果一个函数在相同的输入上始终产生相同的结果,那么它就是引用透明的。
let counter=0
function count(){
return counter++
}
这不是引用透明的,因为返回值取决于外部变量“counter”,并且它一直在变化。
这是我们如何使它的参考透明:
function count(counter){
return counter+1
}
现在这个函数是稳定的,并且在提供相同的输入时总是返回相同的输出。
推荐文章
- 大的Ө符号到底代表什么?
- 在Scala中,foldLeft和reducleft的区别
- Java SE 8有对或元组吗?
- 一个字符串的字符串列表
- 对于没有null的语言的最佳解释
- Python:为什么functools。部分有必要吗?
- 如何用动态规划确定最长递增子序列?
- 我如何用groupBy计算发生的事件?
- foreach和map有区别吗?
- 在函数式编程中,什么是函子?
- PHP中接口的意义是什么?
- 面向对象编程,函数式编程,过程式编程
- 什么是“P=NP?”,为什么这是一个如此著名的问题?
- 为什么不可变性在JavaScript中如此重要(或需要)?
- 如何使用underscore.js作为模板引擎?