【问题标题】:I got compilation error during one ocaml function call在一次 ocaml 函数调用期间出现编译错误
【发布时间】:2015-08-12 17:36:32
【问题描述】:

感谢您的关注。我遇到了一个 ocaml 函数调用问题。在这里。

这是函数定义。假设这些是在 pp.ml 中定义的。

    let ast_exp_to_string = pp2string (fun p -> p#ast_exp ~prec:0)

    let ast_exp_to_string_in_varctx ctx = pp2string_with_pp ctx 
    (fun p-> p#ast_exp ~prec:0)


    let pp2string f v =
      let strpp = new pp ft in
      pp2string_with_pp strpp f v

    let pp2string_with_pp pp f v =
      Format.pp_open_box ft 0;
      f pp v;
      Format.pp_print_flush ft ();
      let s = Buffer.contents buf in
      Buffer.reset buf;
      s

    let make_varctx () =
      new pp ft

我可以像这样成功调用ast_exp_to_string Pp.ast_exp_to_string e

但是当我用

调用 ast_exp_to_string_in_varctx
    let varctx = Pp.make_varctx;;

    Pp.ast_exp_to_string_in_varctx varctx e

我得到如下编译错误:

Error: This expression has type unit -> Pp.pp
       but an expression was expected of type
         < ast_exp : prec:int -> 'a -> 'b; .. >

你能帮我看看吗?有什么问题?提前致谢!

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    您忘记将参数应用于函数varctxt。它接受一个unit 类型的参数。所以正确的代码是:

    let varctx = Pp.make_varctx ();;
    Pp.ast_exp_to_string_in_varctx varctx e
    

    【讨论】:

    • 您好,我添加并再次尝试。仍然得到同样的错误。错误:此表达式的类型为 Pp.pp,但预期的表达式类型为 'a -> 'b; .. >
    • 是的,你想要什么?
    • 我想调用函数Pp.ast_exp_to_string_in_varctx。我对ocaml不是很熟悉。那么你能帮帮我吗?据我了解, Pp.ast_exp_to_string_in_varctx 需要两个参数。第一个是ctx,第二个是ast exp。那么为什么编译仍然抱怨?谢谢。
    • 首先报错不一样。其次,无法猜测,发生了什么。我不知道Pp.pp是什么,pp是什么,它们是否属于同一类型。您没有提供足够的信息。
    • 嗨伊万。您可能会发现,这是 BAP 0.8 版中代码的一部分。 Pp.pp 是 pp.ml 中定义的类 pp
    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多