此表达式的类型为 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;;
使用上面的函数:
- 以下表达式有效:
let _ = displayList [5;5;6;5;5;6;3]
in ();
并显示“5;5;6;5;5;6;3;”。
- 以下表达式无效:
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 ']'
;;
我是 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;;
使用上面的函数:
- 以下表达式有效:
let _ = displayList [5;5;6;5;5;6;3] in ();
并显示“5;5;6;5;5;6;3;”。 - 以下表达式无效:
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 ']'
;;