我需要创建与标准输入流绑定的lexer
的新实例。
但是,当我输入
val lexer = makeLexer( fn n => inputLine( stdIn ) );
我收到一个我不明白的错误:
stdIn:1.5-11.13 Error: operator and operand don't agree [tycon mismatch]
operator domain: int -> string
operand: int -> string option
in expression:
(
makeLexer
是我的源代码中存在的函数名称) 最佳答案
inputLine返回一个string option
,我猜应该是string
。
您想要做的就是让makeLexer
取一个string option
,如下所示:
fun makeLexer NONE = <whatever you want to do when stream is empty>
| makeLexer (SOME s) = <the normal body makeLexer, working on the string s>
或将行更改为:
val lexer = makeLexer( fn n => valOf ( inputLine( stdIn ) ) );
valOf采用一个选项类型并将其解压缩。
请注意,由于
inputLine
在流为空时返回NONE
,因此使用第一种方法而不是第二种方法可能是一个更好的主意。