此表达式的类型为 unit 但表达式应为字符串类型

This expression has type unit but an expression was expected of type string

我是 Ocaml 新手,

我正在尝试弄清楚如何将 "cast" 类型常量 "unit" 类型常量转换为 "string" 类型。

我看到有 string_of_int 函数可以对整数类型执行此操作,但找不到 "unit" 类型的等效函数。也许与 Printf 有关,我使用 Printf.printf "%B" (x); 来处理布尔值,但我还没有弄清楚在 "unit" 类型的情况下会使用什么。

这是我的代码示例:

函数定义:

let displayList l = List.iter(fun x -> print_string(string_of_int x^";")) l;;

使用上面的函数:

  1. 以下表达式有效:let _ = displayList [5;5;6;5;5;6;3] in (); 并显示“5;5;6;5;5;6;3;”。
  2. 以下表达式无效:let _ = print_string ("[" ^ displayList [5;5;6;5;5;6;3] ^ "]") in ();。它抛出错误信息 “此表达式具有类型单位,但表达式应为 输入字符串。

您混淆了打印值和 returned 值。

displayList 没有 return string。它打印一个 string 然后 return 一个 unit。字符串连接运算符 (^) 需要两个 string,但是,如前所述,displayList 的 return 类型是 unit.

unit 中生成 string 不会像您期望的那样。 displayList 仍会打印 5;5;6;5;5;6;3; 并且您的表达式将 return 像 "[()]".

这样的字符串

如果您打算打印 [5;5;6;5;5;6;3;],解决方案(使用您已有的)可能是

let displayList l =
  print_char '[';
  List.iter(fun x -> print_string(string_of_int x^";")) l;
  print_char ']'
;;