在https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/pattern-matching#tuple-pattern,有一个带有类型注释的模式示例:
模式可以具有类型注释。它们的行为类似于其他类型注释,并像其他类型注释一样指导推理。模式中的类型注释必须带括号。以下代码显示了具有类型注释的模式。
let detect1 x = match x with | 1 -> printfn "Found a 1!" | (var1 : int) -> printfn "%d" var1 detect1 0 detect1 1
类型注释(var1 : int)
是多余的,因为先前模式中的文字1
明确地建立了类型。
在任何情况下,这样的类型注释会有用吗?
答案 0 :(得分:2)
实际上,即使在函数参数中使用类型注释,您也在模式中使用类型注释。 F#模式匹配甚至适用于函数参数(通常为let
绑定)。
因此,像往常一样,当我们要立即强制类型而不是依赖类型推断时,类型注释很有用。我们可以在很多地方放置类型注释以达到相同的结果。只要选择最适合这种情况的地方即可。考虑下面的示例:
let detect2 (x : int option) =
match x with
| Some y -> ...
| None -> ...
我们可以写短一些:
let detect2 x =
match x with
| Some (y : int)
| None -> ...
在这种情况下,我们应该选择后一种。