表达式期望的类型单元,但它已经是
expression expected type unit, but it already does
let _ =
try ("hello"; ()) with
| _ -> print_endline "hi"
编译这个告诉我 ("hello"; ())
'should have type unit'
事实上,我用这段代码得到了同样的警告
let _ = "hello"; ()
或此代码
let _ = ("hello"; ())
但是它 的类型是 unit
...不是吗?
表达式:
let f = "hello";1;;
触发警告:
this expression should have type unit - around "hello" string.
这是因为您试图通过 "hello" return 第一个值,然后 return 1
意味着 ocaml 必须忽略 "hello" .
如果您将其替换为 unit
- 意思是 "here I return nothing",就可以了。
表达式:
let f = (); 1;;
不发出警告,f
是 int
。
因此您收到的警告与表达式的内部代码有关,与您编写的表达式的类型无关。
let f = "hello";();;
编译器警告你计算了一些你之后忽略的东西("hello" 从未使用过,return 的值是 f
是 ()
) .但是,正如您所注意到的,f
的类型为 unit
。
在utop
中:
let _ = try ("hello"; ()) with
| _ -> print_endline "hi";;
你得到:
Characters 13-20:
Warning 10: this expression should have type unit.
精确定位到 "hello"
字符串的位置 - 但不定位到 ("hello"; ())
。 ("hello"; ())
有类型单位,与 print_endline "hi"
完全一样。
警告只是关于应该代替 "hello";
的表达式应该具有类型单位这一事实。
let _ =
try ("hello"; ()) with
| _ -> print_endline "hi"
编译这个告诉我 ("hello"; ())
'should have type unit'
事实上,我用这段代码得到了同样的警告
let _ = "hello"; ()
或此代码
let _ = ("hello"; ())
但是它 的类型是 unit
...不是吗?
表达式:
let f = "hello";1;;
触发警告:
this expression should have type unit - around "hello" string.
这是因为您试图通过 "hello" return 第一个值,然后 return 1
意味着 ocaml 必须忽略 "hello" .
如果您将其替换为 unit
- 意思是 "here I return nothing",就可以了。
表达式:
let f = (); 1;;
不发出警告,f
是 int
。
因此您收到的警告与表达式的内部代码有关,与您编写的表达式的类型无关。
let f = "hello";();;
编译器警告你计算了一些你之后忽略的东西("hello" 从未使用过,return 的值是 f
是 ()
) .但是,正如您所注意到的,f
的类型为 unit
。
在utop
中:
let _ = try ("hello"; ()) with
| _ -> print_endline "hi";;
你得到:
Characters 13-20:
Warning 10: this expression should have type unit.
精确定位到 "hello"
字符串的位置 - 但不定位到 ("hello"; ())
。 ("hello"; ())
有类型单位,与 print_endline "hi"
完全一样。
警告只是关于应该代替 "hello";
的表达式应该具有类型单位这一事实。