在 SML 中将字符串转换为 int
Converting a string to int in SML
在尝试为 SML 中的一种简单语言创建解释器时,我正在努力将字符串转换为整数。例如,
val someString = " 1.9"
Int.fromString someString
returns:
val it SOME 1 : int option
此外,当我尝试使用以下选项从选项类型中提取值时:
valOf(Int.fromString someString);
它returns:
val it = 1 : int
我很困惑为什么它仍然将字符串转换为这个整数,即使它是一个实数。以及如何将字符串转换为 int 并处理错误(如果有)。
我不知道每个实现中的转换是如何工作的,但是在 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")
returns 1
.
在尝试为 SML 中的一种简单语言创建解释器时,我正在努力将字符串转换为整数。例如,
val someString = " 1.9"
Int.fromString someString
returns:
val it SOME 1 : int option
此外,当我尝试使用以下选项从选项类型中提取值时:
valOf(Int.fromString someString);
它returns:
val it = 1 : int
我很困惑为什么它仍然将字符串转换为这个整数,即使它是一个实数。以及如何将字符串转换为 int 并处理错误(如果有)。
我不知道每个实现中的转换是如何工作的,但是在 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")
returns 1
.