我需要创建与标准输入流绑定的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,因此使用第一种方法而不是第二种方法可能是一个更好的主意。

10-06 16:06