在 SML 中,我必须使用 else 部分,因为这些是语言的规则。

我怎么能在 else 条件下什么都不做呢?

fun calc(input : string ) : int =

    let
      val outStr = ref "someString"
      val outInt = ref 0
    in
      outInt := (validateHelper(input) handle _ => ~1);
      if (outInt <> ~1)
         then
            (  outStr := replaceRomanDec(input);       (* replace roman number with decimal *)
               outInt := (calcMyRomanExpression(!outStr) handle _ => ~1);
            )
         else (* nada *)

      !outInt
    end;

最佳答案

else ()

()unit 类型的唯一居民。它使整个 if-then-else 结构类型良好,因为 then 分支也有类型 unit

最后,在一些 ML 变体中 if e1 then e2 可以用作 if e1 then e2 else () 的快捷方式,但在 SML 中不能。

关于sml - 如何在 SML 中的 if 条件的其他部分中 "do nothing",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14180728/

10-13 07:37