パラメータとしてカスタムオブジェクトに渡すためのOCamlの構文
質問
私はOCamlの言語の構文上のグリップを取得しようとしていると、いくつかのOOPの構造を適用するといくつかの問題を抱えています。以下のコードで私の目標は、仮想クラスのfooを継承するクラスのバーを持つことです。仮想クラスは、私は、パラメータとして「選手」オブジェクトのインスタンスを取ることを望む3つの仮想メソッドが含まれています。私は以下のコードをコンパイルすると、私はエラーを取得する:メソッドdoThisは、「 - >」型はBをしかしタイプのプレーヤーを持っていることが予想されます。この平均は何を(私はこれで新たなんだ、覚えて)ないと私はそれを修正についてどのように行くのですか?
ありがとうございます。
class player =
object
end;;
class virtual foo =
object (self)
method virtual doThis : player
method virtual doThat : player
method virtual notifyAll : player array
end;;
class bar (playersIn: player array) =
object (self)
inherit foo
method doThis (p:player) = Printf.printf "%s\n" "This!"
method doThat (p:player) = Printf.printf "%s\n" "That!"
method notifyAll (p:player array) = Printf.printf "%s\n" "Notifying!"
end;;
解決
(私はOCamlのを知らないが、私はF#のを知っていますか、と彼らは似ているので、うまくいけば、私は右推測しています。)
タグ変更してみてください
method virtual doThis : player
method virtual doThat : player
method virtual notifyAll : player array
タグに
method virtual doThis : player -> unit
method virtual doThat : player -> unit
method virtual notifyAll : player array -> unit
他のヒント
私はこれまで、前の答えが正しいと信じて:当該の方法は、ユニットを返す関数であることを自分のタイプを必要とする
。アドバイスのもう一つの、より一般的な作品は:オブジェクトシステムを学ぶために開始することにより、OCamlでの学習を開始しません。 OCamlの内のオブジェクトは便利ですが、あなたは本当にオブジェクトを使用してプログラミングしたい場合は、数との間に離れています。そして、あなたは、あなたがコア言語の良いグリップを得るまでのOCamlのオブジェクトシステムを理解することはできません。基本的な代数的データ型(変異体、タプル、記録)、通常のパラメトリック多型(あなたが多相バリアントとオブジェクトと参照サブタイプではなく)、およびモジュール(ただしファンクタ)を使用して、あなたの問題を解決する方法に焦点を当てています。
オブジェクトで遊ん前に、これらの基本的なツールの理解を取得します。あなたが他の言語でオブジェクトを解決する問題のほとんどは、それらなしOCamlの中で最良の解決されます。