Вы в основном правы, но либо путаете синтаксис с модульной системой, либо думаете о других языках. Примите мои соображения, и вы должны быть хорошими!
Я хотел бы создать новый Foo
в методе объекта в
ниже. Этот код не компилируется,
ссылаясь на синтаксическую ошибку с
определение doFooProc.
Строчная «foo» для объектов, модули прописные. Кроме того, вы должны поместить определение foo над объектом, который его вызывает. Вы должны получить Unbound class foo
, если это произойдет.
class bar =
object (self)
method doFooProc = (new foo "test")#process
end;;
Кроме того, синтаксис «let» не выглядит дружественным в определениях классов. Почему это?
Поскольку у вас нет соответствующего in
, вместо этого у вас есть точка с запятой. Тогда это будет работать. Кроме того, вы можете удалить эти лишние парены, но это не имеет значения.
class bar =
object (self)
method doFooProc =
let xxx = (new Foo "test") in
xxx#process
end;;
Если, скажем, метод в foo создан
бар, есть ли способ
избежать проблемы, которая возникает с
упорядочение определений классов в
исходный файл?
Да. Это похоже на написание взаимно рекурсивных функций и модулей, вы связываете их с ключевым словом and
.
class bar =
object (self)
method doFooProc = (new foo "test")#process
end
and foo (param1:string) =
object (self)
method process = Printf.printf "%s\n" "Processing!"
initializer Printf.printf "Initializing with param = %s\n" param1
end