2016-10-26 7 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은 타입 추론에서 잘 작동하지 않으므로 연산자 오버로딩 (aka ad hoc polymorphism)이 없습니다. 그러나 이것은 코드를 훨씬 명확하게 만들어 주며, 이는 이점으로 간주 될 수 있습니다.