在尝试在SML中为简单语言创建解释器时,我很难将字符串转换为整数。例如,
val someString = " 1.9"
Int.fromString someString
返回:
val it SOME 1 : int option
此外,当我尝试使用:
从选项类型中提取值时valOf(Int.fromString someString);
它返回:
val it = 1 : int
我很困惑为什么它仍然将字符串转换为这个整数,即使它是一个实数。如何将字符串转换为int并处理错误(如果有的话)。
答案 0 :(得分:6)
我不知道每个实现中的转换是如何工作的,但是在Poly / ML中,如果到目前为止读取了有效的int,则有效的int将是returned - 即使整个字符串不是有效的中间体
正如molbdnilo指出的那样,使用Char.isDigit函数(或者你自己允许更多int情况)更容易检查字符串是否为int:
List.all Char.isDigit (String.explode someString)
关于你与valOf的混淆,这是完全可以预料到的,因为你已经看到Int.fromString返回了一个int选项。 valOf
函数的定义如下:
fun valOf (opt: 'a option) : 'a =
case opt of
NONE => raise Fail "option is NONE"
| SOME a => a
因为您看到Int.fromString " 1.9"
返回SOME 1
,必须是valOf (Int.fromString " 1.9")
返回1
的情况。