在 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/