如何解决OCaml - Base 导致元组解构问题
当 Base
添加到以下代码中时,为什么 OCaml 编译器希望 h
和 w
为 int
? 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 库移除了多态比较。您可以这样使用运算符:
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 如何处理元组。
,Base
与其他 Janestreet 库一样,不鼓励多态比较函数并隐藏 compare
、(=)
和其他运算符及其单态等价物。他们或多或少选择了比较整数的函数(遵循 SML 传统)。
你仍然可以得到你的多态比较函数,使用
open Poly
或者,本地,
let true = Poly.((1,2) = (1,2))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。