는 ==
의 동작은 Pervasives 모듈에 정의된다 : E1 및 E2의 물리적 어떤지
E1은 E2 == 테스트. 참조, 배열, 바이트 시퀀스, 변경 가능한 필드가있는 레코드 및 변경 가능한 인스턴스 변수가있는 객체와 같은 변경 가능한 유형에서 e1의 물리적 수정이 e2에도 영향을주는 경우에만 e1 == e2가 true입니다. 비 변경 가능 유형에서 (==)의 동작은 구현에 따라 다릅니다. 그러나, E1 == E2 함수가 가변 아니므의 E1의 E2 = 0
비교 의미 것을 보장하는 유일한 보증은 ==
와 동일 비교한다면 그들은 또한 compare
와 동일 비교한다는 것이다. 함수가 compare
과 비교 될 수 있다고 보장되지 않으므로, 이것은 본질적으로 ==
이 비교 함수에 전혀 유용하지 않다는 것을 의미합니다.
# compare (==) (==);;
Exception: Invalid_argument "equal: functional value".
불변 값 false
반환 ==
경우, 전혀 보장이 없습니다. 즉, ==
은 임의의 불변 값에 대해 언제든지 false
을 반환 할 수 있습니다. 두 번째 예제에서 false
을 반환하는 것은 부적절하지 않습니다.
'(==)'는 고차 함수에 전달할 준비가 된 클로저로 존재하지 않습니다. 해당 응용 프로그램은 인라인 형식으로 직접 작성됩니다. 클로저는 필요할 때마다 할당되고'(==) == (==)'를 쓸 때 서로 다른 주소에 두 개의 클로저가 할당됩니다. 비슷한 속성을'print_string'에 쓰고 싶다면, 현재의 OCaml 구현체를 사용해서, 한 곳의 클로저에 모든 것을 사용할 수 있도록 이름을 지정하십시오 :'let phys_equal x y = x == y ;;'. 이것은 매번 적용되지 않은'(==)'에 대해 클로저를 할당하는 것보다 더 메모리 효율적인 것입니다. –