我希望这可以工作:
fun function (i) =
let
if i = 1 then
val h = valOf(Int.fromString(valOf(TextIO.inputLine TextIO.stdIn)))
else
val h = someFunction();
in
code...
end
但似乎你不能宣布这样的价值......我该怎样做才能使它发挥作用?
答案 0 :(得分:4)
ML中的if
语句是表达式。这意味着它必须具有价值。请记住,SML中的值声明如下所示:
val <name> = <expression>
由于if ... then ... else
语句是一个表达式,您可以放在=
的右侧。
fun function i =
let
val h = if i = 1 then ...
else ...
in
...
end
另一件事。请记住,valOf
可能会出错。在输入上使用它几乎要求你的程序崩溃,因为用户可以键入任何内容。
答案 1 :(得分:1)
这个怎么样:
fun function(i)=
let
fun nextInput() =
case (TextIO.inputLine TextIO.stdIn) of
NONE => 0
| SOME s => case Int.fromString(s) of
NONE => 0
| SOME n => n
val h = if i = 1 then nextInput() else someFunction()
in
code...
end
通过这种方式,您可以覆盖用户无法输入数字,但不能输入任何内容或根本不输入任何内容的情况。