【发布时间】:2013-07-22 19:18:23
【问题描述】:
我正在尝试学习 SML,并编写了一个类似于 Zed Shaw's book '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(功能)方式吗?
按照塞巴斯蒂安的回答:
只是为了通知普通读者:
在寻找调试此错误的方法时,我注意到如果我在 REPL 中键入 TextIO.inputLine TextIO.stdIn; 并键入一些 abc,我会返回“abc\n”。我不知道可以使用 REPL 来尝试 ML 程序而无需编译它们。
【问题讨论】:
标签: if-statement sml