在SML中将字符串转换为int

时间:2016-03-07 05:05:14

标签: sml

在尝试在SML中为简单语言创建解释器时,我很难将字符串转换为整数。例如,

val someString = " 1.9"
Int.fromString someString

返回:

val it SOME 1 : int option

此外,当我尝试使用:

从选项类型中提取值时
valOf(Int.fromString someString);

它返回:

val it = 1 : int

我很困惑为什么它仍然将字符串转换为这个整数,即使它是一个实数。如何将字符串转换为int并处理错误(如果有的话)。

1 个答案:

答案 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的情况。