代码之家  ›  专栏  ›  技术社区  ›  Barry Brown

抑制标准ML中的“val it”输出

  •  9
  • Barry Brown  · 技术社区  · 17 年前

    我正在用标准ML(SML/NJ)编写一个“脚本”,根据我的喜好设置交互式环境。脚本所做的最后一件事是打印一条消息,表明一切进展顺利。基本上,最后一行是:

    print "SML is ready.\n";
    

    功能。

    SML is ready.
    val it = () : unit
    -
    

    3 回复  |  直到 17 年前
        1
  •  12
  •   pjp    17 年前

    Compiler.Control.Print.out := {say=fn _=>(), flush=fn()=>()};
    print "I don't show my type";
    
    I don't show my type
    

    虽然我不明白为什么打印函数返回的类型是坏的。

    say函数控制打印出的内容。

    以下SML/NJ注释中有一个较大的示例 http://www.cs.cornell.edu/riccardo/prog-smlnj/notes-011001.pdf

    UseSuillet函数可用于加载文件,但不显示任何输出 与装载相关

    fun useSilently (s) = let
    val saved = !Compiler.Control.Print.out
    fun done () = Compiler.Control.Print.out := saved
    in
    Compiler.Control.Print.out := {say = fn _ => (), flush = fn () => ()}
    (use (s); done ()) handle _ => done ()
    end
    

    这实质上是将say函数更改为不做任何事情,然后在最后将其设置回原处。

        2
  •  4
  •   Andreas Rossberg    13 年前

    使用以下命令:

    val _ = print "I don't show my type";
    
        3
  •  2
  •   sshine    7 年前

    在Moscow ML中,您可以使用

    mosml -quietdec file.sml