我有以下代码:
type point = { x : float; y : float; z : float }
type dpoint = { dx : float; dy : float; dz : float }
type physical_object = { position : point; velocity : dpoint }
let move p dp = {x = p.x + dp.x; y = p.y + dp.y; z = p.z + dp.z}
我收到此错误:
File "code.ml", line 4, characters 21-24:
Error: This expression has type float but an expression was expected of type
int
p.x
突出显示
这是为什么? 我没有正确引用记录的字段吗?
答案 0 :(得分:2)
在OCaml中,+
仅适用于整数。对于浮点数,您必须使用+.
运算符(带有点后缀的运算符)。有关详情,请参阅例如http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html
答案 1 :(得分:2)
运营商+
的类型为int -> int -> int
,因此仅适用于int
类型的值。使用+.
运算符表示浮点数,(和*.
,/.
相应地用于其他运算。)
OCaml没有运营商重载(又名ad hoc polymorphism),因为它不能很好地与类型推断相匹配。但是,它会使您的代码更加明确,这可以被视为一种好处。