【问题标题】:OCaml boolean expression [[]] == [[]]OCaml 布尔表达式 [[]] == [[]]
【发布时间】:2012-04-18 01:28:06
【问题描述】:

我有一个返回[[]] 的函数,我想将结果作为单元测试进行测试。 但我发现表达式[[]] == [[]] 返回false。 这里是一个简单的测试代码:

# [[]] == [[]];;
- : bool = false

谁能解释一下为什么这个表达式被评估为假?

谢谢。

【问题讨论】:

标签: list boolean ocaml expression


【解决方案1】:

OCaml 中的== 运算符表示“物理平等”。但是,您有两个(物理上)不同的列表。可能,您想要“结构平等”,这是由= 测试的。

【讨论】:

  • 好的,我明白了。但这意味着第一个[[]]是'a list list,第二个'b list list?
  • 是的,每个[] 分配一个新列表(c.f. cs.jhu.edu/~scott/pl/lectures/caml-intro.html),但两个列表都不是非常相同列表。
  • [] 具有结构和物理相等性(类似于整数)。它不分配新列表。创建新列表的是外部括号,因为[[]] = ([] :: [])
  • @nlucaroni:实际上,我指的是外括号。感谢您清除这一点。
【解决方案2】:

使用=,因为你有结构相等来比较两个值:

# [[]] = [[]];;
- : bool = true

因为==引用相等,所以只有引用相同的内存位置才会返回true:

let a = [[]]
let b = a

# b == a;;
- : bool = true

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2015-04-29
    • 2016-07-13
    相关资源
    最近更新 更多