Abh*_*mar 2 ocaml functional-programming
utop # [1;2];;
- : int list = [1; 2]
utop # 1::2::[];;
- : int list = [1; 2]
utop # 1::2::[] == [1;2];;
- : bool = false
Run Code Online (Sandbox Code Playgroud)
虽然单独评估的两个表达式看起来相同,但为什么OCaml相等函数返回false?
Pat*_*atJ 19
该==操作并不代表结构的平等,但对身体的平等.在类C语言中,它不会比较值而是指针.在非可变值上使用它通常是不明智的(除非你正在进行记忆).
引用OCaml手册:
e1 == e2测试物理平等e1和e2.在可变类型(例如引用,数组,字节序列,具有可变字段的记录和具有可变实例变量的对象)中,e1 == e2当且仅当物理修改e1也会影响时才是真实的e2.在非可变类型上,行为( == )依赖于实现; 但是,它保证e1 == e2暗示compare e1 e2 = 0.
现在,如果您尝试使用=测试结构相等的运算符.
utop # 1::2::[] = [1;2];;
- : bool = true
Run Code Online (Sandbox Code Playgroud)