【问题标题】:Suppress "val it" output in Standard ML抑制标准 ML 中的“val it”输出
【发布时间】:2010-11-18 21:46:20
【问题描述】:

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

print "SML is ready.\n";

当我运行脚本时,一切正常,但 SML 解释器显示 print 函数的返回值。

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

由于我只是在屏幕上打印一些东西,我怎样才能抑制“val it = () : unit”输出,以便我看到的只是“SML 准备就绪”消息,然后是解释器提示?

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    在莫斯科 ML 中,您可以在没有声明输出的情况下运行 REPL

    mosml -quietdec file.sml
    

    【讨论】:

      【解决方案2】:

      使用这个:

      val _ = print "I don't show my type";
      

      【讨论】:

        【解决方案3】:

        要抑制 SML-NJ 提示和响应,请使用以下分配。

        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中有一个更大的例子

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

        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 函数更改为什么都不做,然后在最后将其设置回来。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-03
          • 2012-04-14
          • 2012-08-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多