当
Base
添加到以下代码中时,为什么 OCaml 编译器期望 h
和 w
为 int
s? tup
应该是一个元组 - 是否存在语法问题? Base 的什么原因导致了这个错误?
open Base
let () =
let tup = ("hello", "world") in
let h, w = tup in
if h = w then print_endline "equal" else print_endline "not equal"
错误:
91 | if h = w then print_endline "equal" else print_endline "not equal"
^
Error: This expression has type string but an expression was expected of type
int
Base
与其他 Janestreet 库一样,不鼓励使用多态比较函数,并隐藏 compare
、(=)
和其他运算符及其单态等效项。他们或多或少任意地选择了比较整数的函数(遵循 SML 传统)。
您仍然可以获得多态比较函数,使用
open Poly
或者,本地,
let true = Poly.((1,2) = (1,2))
Base 库删除了多态比较。您可以这样使用运算符:
open Base
let () =
let tup = ("hello", "world") in
let h, w = tup in
if String.(h = w) then print_endline "equal"
else print_endline "not equal"
编辑:如果解释不清楚,则 Base 库不会影响 OCaml 处理元组的方式。