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