2

OCaml を使用してデータ メンバを持つオブジェクトを作成したいのですが、必ずしもデータ メンバの初期値を指定する必要はありません。多くの例ではリストを使用しているように見えますが、作成したオブジェクト タイプの単一のインスタンスを使用したいと考えています。これは可能ですか?ありがとう。

class bar = object end;;

class foo =
object (self)
val myDataMember = ((* ??? *) : bar)
end;;

さらに、オプションキーワードを無駄に試しました:

class bar = 
object (self) 
    method doIt = Printf.printf "Doing it!"
end;;

class foo bar =
object (self)
  val mutable myDataMember = (None : bar option)
  method get = myDataMember
end;;

let f = new foo (new bar);;
f#get#bar#doIt;;

ここで、コンパイラは、データ メンバが "bar オプション" 型を持つように指定したいときに、データ メンバが bar 型を持つように指定したいと文句を言います。

4

2 に答える 2

3

オプションのタイプを使用する必要があります:

class foo =
object (self)
val myDataMember = (None : bar option)
end;;

もちろん、これを使用できるようにするには、おそらくミュータブルを使用する必要があります。

class foo =
object (self)
  val mutable myDataMember = (None : bar option)
  method set t = myDataMember <- (Some t)
  method get () =
    match myDataMember with
    Some x -> x
    None -> failwith "not initialized"
end;;
于 2009-03-02T01:31:52.640 に答える