微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Ocaml中的嵌套对象中调用方法的语法

如何解决在Ocaml中的嵌套对象中调用方法的语法

我是OCaml的新手,我试图创建一个使用堆栈的程序。所以这就是我所做的:

  1. 我有一个对象(后来定义为ob_ctx),其中的一些字段定义如下:

type my_custom_type = {
      nb_locals: int;
      mutable label_br: stack_of_string;
}
  1. 我有class 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;;
  1. 我在终端中尝试了类和方法,它们似乎运行良好,但是当我在文件中的函数中尝试此方法时,它不起作用:
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 ....

它说

错误:此函数的字符串类型为-> unit 它适用于过多的参数;也许您忘记了“;”。命令以代码2退出

我不明白参数太多了,推入需要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会话中有剩余的定义,这些定义令人困惑。您可以尝试从头开始。我希望您会看到与我一样的东西,即代码可以编译。

如果没有,您应该给出一个完整的(独立的)示例,该示例引发您所看到的错误。否则很难提供帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。