4

OCaml 言語の構文を理解しようとしていますが、いくつかの OOP 構造を適用する際に問題が発生しています。以下のコードでの私の目標は、仮想クラス foo から継承するクラス バーを持つことです。仮想クラスには、「プレーヤー」オブジェクトのインスタンスをパラメーターとして取得する 3 つの仮想メソッドが含まれています。以下のコードをコンパイルすると、次のエラーが表示されます。これはどういう意味ですか (覚えておいてください、私はこれが初めてです)、どうすれば修正できますか?

ありがとう!

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;;
4

2 に答える 2

2

(私は 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
于 2009-02-01T22:33:55.027 に答える
1

これに対する以前の答えは正しいと思います。問題のメソッドは、その型がユニットを返す関数である必要があります。

もう 1 つの、より一般的なアドバイス: オブジェクト システムの学習から始めて OCaml の学習を開始しないでください。OCaml のオブジェクトは便利ですが、実際にオブジェクトを使ってプログラミングしたい場合はほとんどありません。また、コア言語を十分に理解するまでは、OCaml のオブジェクト システムを理解することはできません。基本的な代数的データ型 (バリアント、タプル、レコード)、通常のパラメトリック ポリモーフィズム (ポリモーフィック バリアントやオブジェクトで見られるサブタイピングとは対照的に)、およびモジュール (ファンクターは除く) を使用して問題を解決する方法に焦点を当てます。

オブジェクトをいじる前に、これらの基本的なツールを理解してください。他の言語のオブジェクトで解決する問題のほとんどは、OCaml で解決するのが最適です。

于 2009-02-08T14:42:09.453 に答える