我想使用 OCaml 创建一个带有数据成员的对象,但不一定要为数据成员指定初始值。许多示例似乎都使用列表,但我想使用我创建的对象类型的单个实例。这可能吗?谢谢。
class bar = object end;;
class foo =
object (self)
val myDataMember = ((* ??? *) : bar)
end;;
此外,我尝试了 option 关键字,但没有成功:
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 option”类型。
最佳答案
您必须使用可选类型:
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;;
关于oop - 无需初始化的 OCaml 数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/600637/