#ocaml
#ocaml
Вопрос:
Я новичок в OCaml, и я пытался создать программу, использующую стек. Итак, вот что я сделал:
- У меня есть объект (позже определенный ob_ctx), который имеет несколько полей, определенных следующим образом:
type my_custom_type = {
nb_locals: int;
mutable label_br: stack_of_string;
}
- У меня есть класс stack_of_string:
class stack_of_string =
object (self)
val mutable the_list = ( [] : string list )
method push x =
the_list <- x :: the_list
method pop =
let result = List.hd the_list in
the_list <- List.tl the_list;
result
method peek =
List.hd the_list
method size =
List.length the_list
end;;
- Я попробовал класс и методы в терминале, и они, похоже, работают нормально, но когда я пытаюсь это сделать в функции в моем файле, это не работает:
let my_fct ctx =
ctx.label_br#push ( function_that_returns_a_string() );
(*or ctx.label_br#push ( "a simple string" ); *)
(*or ctx.label_br#push "a simple string" ; *)
let some_other_var = "sth" in ....
В нем говорится
Ошибка: эта функция имеет тип string -> unit Она применяется к слишком большому количеству аргументов; возможно, вы забыли `;’ . Команда завершается с кодом 2
Я не понимаю, почему так много аргументов, push принимает 1 аргумент, и я дал 1 аргумент. Не мог бы кто-нибудь, пожалуйста, объяснить это мне
Заранее спасибо
Ответ №1:
Вы не даете полного (или автономного) определения для my_fct
. Я использовал следующее определение:
let my_fct ctx =
ctx.label_br#push ( String.make 3 'x' );
let some_other_var = "sth" in some_other_var
С этим определением (и другими определениями выше) ваш код отлично компилируется для меня.
Одной из возможных причин этого является то, что у вас остались определения в вашем сеансе OCaml, которые сбивают с толку. Вы можете попробовать начать заново с нуля. Я ожидаю, что вы увидите то же самое, что и я, то есть, что код компилируется нормально.
Если нет, вы должны привести полный (автономный) пример, который вызывает ошибку, которую вы видите. В противном случае очень сложно помочь.
Комментарии:
1. » Вы можете попробовать начать заново с нуля. » Я сделал, как вы предложили, и это работает!! Большое спасибо!