在Caml中,运算符==
测试两个相同类型值之间的物理相等性。它可以特别用于以这种方式比较功能。
例如,有一个
# print_string == print_string;;
- : bool = true
但令人惊讶的是,
# (==) == (==);;
- : bool = false
此表达式应评估为true
。
你能解释一下这种行为吗?
答案 0 :(得分:5)
==
模块中定义了==
的行为:
e1 == e2测试e1和e2的物理相等性。在可变类型(如引用,数组,字节序列,具有可变字段的记录和具有可变实例变量的对象)上,当且仅当e1的物理修改也影响e2时,e1 == e2才为真。在非可变类型上,(==)的行为是依赖于实现的;但是,保证e1 == e2意味着比较e1 e2 = 0
由于函数不可变,唯一的保证是如果它们与compare
相等,它们也会与compare
进行比较。由于无法保证函数与==
具有可比性,因此这实际上意味着# compare (==) (==);;
Exception: Invalid_argument "equal: functional value".
对于比较函数毫无用处。
==
如果false
为不可变值返回==
,则根本没有保证。这意味着false
可以随时为任何不可变值返回false
。因此,在第二个例子中返回...
contents.setFont(font, 12);
// Loop to create 25 lines of text
for (int i = 0; i < 25; i++) {
int ty = 700 + y * 15;
contents.beginText();
contents.newLineAtOffset(100, ty);
contents.showText(message + " " + Integer.toString(i));
System.out.println(message + " " + Integer.toString(i))
contents.endText();
}
...
并不合适。