我正在尝试学习 SML,并编写了一个类似于Zed Shaw 的“Learn Ruby The Hard Way”一书中的小游戏。下面的代码在 REPL 中运行良好,并且可以很好地与 MLTON 一起编译。但是,它总是导致 else 语句(“错误!”)。如果我尝试用print(valOf(response))
if 语句代替它来调试它,它会返回我输入的任何字符串(如果我不输入任何内容,则返回一个空字符串)。所以我不认为是inputLine函数,也不是let语句不返回stdin,也不应该是比较操作。
fun first_room () =
(print "You're in a dark, mottled room.\n";
print "Which one do you choose? Left or Right?\n";
print "> ";
let val response = (TextIO.inputLine TextIO.stdIn)
in
if response = NONE
then print "You stay.\n"
else if valOf(response) = "Left"
then print "You go left.\n"
else if valOf(response) = "Right"
then print "You go right.\n"
else print "Error!\n"
end)
fun main () = first_room ()
val _ = main ()
所以,我有两个问题: 1 - 什么可能导致这个?2 - 这是构建此程序程序的 ML(功能)方式吗?
按照塞巴斯蒂安的回答:
只是为了通知普通读者:
在寻找调试此错误的方法时,我注意到如果我输入TextIO.inputLine TextIO.stdIn;
REPL 并输入一些 abc,我会得到“abc\n”。我不知道可以使用 REPL 来尝试 ML 程序而无需编译它们。