키는 불변입니다.
기본적으로 가변성을 허용하는 언어 인 Javascript와의 비교를 통해이 지점을 설명하겠습니다. 다음 코드를 고려하십시오
f = function(x) {
return x;
}
g = function(y) {
f = function(x) {
return x+y;
}
}
이제 참조 투명성을 깰 수 있습니다 당신은 자신의 가치와 f
에 전화를 대체 할 수 있기 때문에 우리는 참조 투명성이없는
f(1) -- returns 1
g(10)
f(1) -- returns 11
. 예를 들어, 코드
console.log(f(1))
g(10)
console.log(f(1))
당신은 점점 가치 (1
)와 f(1)
에 모두 전화를 대체 할 수 있다는 상상
console.log(1)
g(10)
console.log(1)
즉 콘솔에 1
를 출력 코드의 조각 두번. 그러나 실제로는 원래 코드를 실행하면 1
을 출력하고 g(10)
을 호출하기 때문에 11
을 출력합니다.
하스켈에서는 모든 값을 변경할 수 없기 때문에 불가능합니다. 즉, 하스켈에서는 범위 밖에있는 다른 함수의 값을 수정하는 함수 g
을 작성할 수 없습니다. 하스켈에서는 코드를 깨뜨리지 않고 항상 함수 호출을 값으로 대체 할 수 있습니다.
런타임에 'g'를 재정의 할 수 없습니까? 미안 하스켈을 아직 알지 못한다. – max
런타임시 아무것도 재정의 할 수 없습니다. – augustss