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

时间:2013-03-13 00:31:24

标签: f# c#-to-f# f#-3.0

我是F#的新手。

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

感谢。

2 个答案:

答案 0 :(得分:4)

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

let isInt x = box x :? int

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

type Test =
| IsAnInteger of int
| IsADouble of double
| NotANumber of Object

然后使用匹配语句来确定您获得的选项。请注意,当您最初使用匹配语句创建要使用的值时,需要将其置于区分联合类型中。

let GetValue x =
    match x with
    | IsAnInteger(a) -> a
    | IsADouble(b) -> (int)b
    | NotAnInteger(_) -> 0

由于您可能会使用您的测试来确定控制流,因此您也可以惯用它。这也可以防止您丢失案例,因为如果您不处理所有可能的情况,匹配语句会给您警告。

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

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

>GetValue (IsAnInteger(5))
val it : int = 5

答案 1 :(得分:0)

考虑到你标记了这个问题“c#-to-f#”我假设你是从C#背景来到F#。因此,我认为您可能会对类型推断感到困惑,因为您可能习惯于显式键入变量。

如果需要,您可以显式声明的类型。

let x:int = 3

但让类型推断为你工作更通常更容易也更好。你会注意到我说 value - 上面的声明不是一个变量,因为你不能对它进行破坏性的赋值。如果你想要一个变量,那么这样做:

let mutable x:int = 3

然后,您可以通过此构造为x分配新值

x <- 5

但是,作为一项规则,您需要避免使用可变值。