让我先解释一下我要做的事情。我正在学习Ocaml类型,并且我定义了一个新类型,比如int2
与int
相同。
# type int2 = int;;
type int2 = int
到目前为止一切顺利。
现在我想定义一个名为add_five
的函数,该函数接受int
类型的参数并返回类型为int2
的值
# let add_five (x : int) = (x + 5 : int2);;
val add_five : int -> int2 = <fun>
大!现在我想将其应用于一个正数和一个负数以确认它是否正常工作。
# add_five 5;;
- : int2 = 10
这工作正常!
# add_five -7;;
Error: This expression has type int -> int2
but an expression was expected of type int
什么?我不明白为什么会这样。我明确告诉Ocaml我想要一个int2
类型的返回函数,那么为什么它声称它需要是int
类型的?
答案 0 :(得分:4)
add_five -7
被解析为(add_five) - (7)
,即-
运算符为中缀。因此,add_five
应该可以从中减去7
,即int
类型的值。解决方案是将其括号(-7)
或使用中缀形式的否定~-7