基数导致元组解构出现问题

问题描述 投票:0回答:2

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
tuples ocaml
2个回答
3
投票

Base
与其他 Janestreet 库一样,不鼓励使用多态比较函数,并隐藏
compare
(=)
和其他运算符及其单态等效项。他们或多或少任意地选择了比较整数的函数(遵循 SML 传统)。

您仍然可以获得多态比较函数,使用

open Poly

或者,本地,

let true = Poly.((1,2) = (1,2))

3
投票

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 处理元组的方式。

© www.soinside.com 2019 - 2024. All rights reserved.