gpt4 book ai didi

functional-programming - ocaml中 "equal (=)"和 "identical (==)"有什么区别?

转载 作者:行者123 更新时间:2023-12-03 01:11:39 25 4
gpt4 key购买 nike

OCaml中,我们有两种权益比较:

x = yx == y

那么它们之间到底有什么区别呢?

ocaml 中的 x = y 与 Java 中的 x.equals(y) 一样吗?

x == y就像Java中的x == y(比较地址)

最佳答案

我不知道x.equals(y)在Java中是如何工作的。如果进行“深度”比较,那么类比就非常接近了。需要注意的一件事是,物理平等在 OCaml(以及一般的函数式语言)中是一个难以捉摸的概念。编译器和运行时系统将移动值,并且可以随意合并和取消合并纯(不可变)值。因此,如果您确实知道自己在做什么,则应该只使用 == 。在某种程度上,它需要熟悉实现(除非必要,否则应该避免)。

OCaml 对 == 所做的具体保证很弱。可变值按照您期望的方式在物理上相等(即,如果改变两者之一实际上也会改变另一个)。但对于不可变值,唯一的保证是物理上比较相等的值 (==) 也将比较为相等 (=)。请注意,相反的情况成立,正如 sepp2k 指出的 float 值一样。

本质上,语言规范告诉您关于非可变值的是,您可以使用 == 作为快速检查来确定两个非可变值是否相等( = )。如果他们在 body 上比较平等,那么他们在值(value)方面也是平等的。如果它们在物理上不相等,你就不知道它们在值(value)方面是否相等。您仍然需要使用 = 来决定。

关于functional-programming - ocaml中 "equal (=)"和 "identical (==)"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13590307/

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