预期的不同类型的表达

时间:2016-10-26 10:10:55

标签: ocaml

我有以下代码:

    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突出显示

这是为什么? 我没有正确引用记录的字段吗?

2 个答案:

答案 0 :(得分:2)

在OCaml中,+仅适用于整数。对于浮点数,您必须使用+.运算符(带有点后缀的运算符)。有关详情,请参阅例如http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html

答案 1 :(得分:2)

运营商+的类型为int -> int -> int,因此仅适用于int类型的值。使用+.运算符表示浮点数,(和*./.相应地用于其他运算。)

OCaml没有运营商重载(又名ad hoc polymorphism),因为它不能很好地与类型推断相匹配。但是,它会使您的代码更加明确,这可以被视为一种好处。