2016-10-26 9 views
0

を期待し、私は次のコードを持っている:発現は

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

オペレータ+は、タイプがint -> int -> intであるため、タイプintの値にのみ適用されます。浮動小数点の場合は+.演算子を使用します(その他の操作では*.,)。

OCamlはタイプ推論ではうまく動作しないため、演算子のオーバーロード(別名ad hoc polymorphism)はありません。しかし、それはあなたのコードをはるかに明示的にし、それは利益と考えられます。

関連する問題