以下に 2 つの例を示します。これらは非常に単純化されており、この単純化された形式では実際的な意味はありませんが、これら 2 つを使用して物事がどのように機能するかを理解するのに役立ちます。
let test x = object (self)
val x = x
method testme = x == self
end in
Printf.printf "printme: %b\n" (test test)#testme;;
let test x = object
method testme = (==) x
end in
Printf.printf "printme: %b\n" ((test test)#testme test);;
最初の例は機能しませんが、2 番目の例は機能します。最初のものは と の型が互換性がないことについて議論x
していますが、 の型が であるtest
という結論にどのように到達するのか理解できません。だけではないのはなぜですか?x
< testme : bool > -> < testme : bool >
< testme : bool >