我是 F# 的新手。
如何检查变量是整数还是其他类型。
谢谢。
@ildjarn 在评论中列出了一种方法:
let isInt x = box x :? int
一种惯用的方法是使用模式匹配。首先,定义一个有区别的联合,它定义了可能的选项:
type Test =
| IsAnInteger of int
| IsADouble of double
| NotANumber of Object
然后使用 match 语句来确定您获得了哪个选项。请注意,当您最初创建希望与 match 语句一起使用的值时,您需要将其放入可区分的联合类型中。
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
考虑到您将此问题标记为“c#-to-f#”,我假设您是从 C# 背景来到 F#。因此,我认为您可能对类型推断有点困惑,因为您可能习惯于显式键入变量。
如果需要,您可以显式声明值的类型。
let x:int = 3
但是让类型推断为您完成这项工作通常更容易更好。你会注意到我说的是价值——上面的声明不是一个变量,因为你不能对它进行破坏性的赋值。如果你想要一个变量,那么这样做:
let mutable x:int = 3
然后,您可以通过此构造为 x 分配一个新值
x <- 5
但是,作为一项规则,您需要避免可变值。