F # получить # бар # Doit ;;
Здесь компилятор жалуется на
элемент данных с типом "опция бара"
когда я хотел указать это иметь
Тип бара.
В ответ на ваш новый вопрос. Вы не указали, что он имеет тип bar
, вы указали, что он имеет bar option
(именно тогда, когда вы набрали (None : bar option)
). Чтобы получить доступ к этому, вам нужно сопоставить - это может быть лучше в методе get
, но точка верна.
match f#get#bar with
| Some x -> x#doIt
| None -> failwith "value not initialized"
Я не знаю, что вы имели в виду bar
, когда писали, class foo bar
, но это аргумент для класса foo
(функциональный объект) и не имеет ничего общего с классом bar
. Взгляните на определение типа foo
.
'a -> object val mutable data : bar option method get : bar option end
Это объект, который принимает один аргумент любого типа и создает экземпляр объекта. В целом, я не думаю, что вам нужен тип опции в качестве решения, но используйте функциональные объекты, например:
class bar = object (self)
method doIt = Printf.printf "Doing it"
end
class foo (arg1:bar) = object (self)
val mutable data = arg1
method get = data
method set new_data = data <- new_data
end