如何检查变量是否是 F# 中的整数?

Eri*_*tas 2 f# c#-to-f# f#-3.0

我是 F# 新手。

如何检查变量是整数还是其他类型。

谢谢。

N_A*_*N_A 5

@ildjarn 在评论中列出了一种方法:

let isInt x = box x :? int
Run Code Online (Sandbox Code Playgroud)

一种惯用的方法是使用模式匹配。首先,定义一个可区分的联合,它定义了可能的选项:

type Test =
| IsAnInteger of int
| IsADouble of double
| NotANumber of Object
Run Code Online (Sandbox Code Playgroud)

然后使用 match 语句来确定您获得了哪个选项。请注意,当您最初创建要与 match 语句一起使用的值时,您需要将其放入可区分的联合类型中。

let GetValue x =
    match x with
    | IsAnInteger(a) -> a
    | IsADouble(b) -> (int)b
    | NotAnInteger(_) -> 0
Run Code Online (Sandbox Code Playgroud)

由于您可能要使用您的测试来确定控制流,因此您不妨按惯用方式进行。这也可以防止您遗漏案例,因为如果您没有处理所有可能的案例,match 语句会向您发出警告。

>GetValue (NotAnInteger("test"));;
val it : int = 0

>GetValue (IsADouble(3.3))
val it : int = 3

>GetValue (IsAnInteger(5))
val it : int = 5
Run Code Online (Sandbox Code Playgroud)