匹配中的函数类型推断

Igo*_*kin 0 f#

请问,有人可以解释为什么这里的函数类型被推断为字符串 - >字符串?

let myFunc a:string = 
    match a with 
    | "A" -> 1
    | _ -> 0
Run Code Online (Sandbox Code Playgroud)

当参数是通用的时,这种方法很好,但是一旦我添加:string,类型就会改变.为什么?

编辑: 我想声明参数类型是一个字符串,因为我实际上想要使用String.ToUpper()进行匹配:

let myFunc a:string = 
    match a.ToUpper() with 
    | "A" -> 1
    | _ -> 0
Run Code Online (Sandbox Code Playgroud)

有点尴尬的解决方案就是这样

let myFunc a = 
    match a.ToString().ToUpper() with 
    | "A" -> 1
    | _ -> 0
Run Code Online (Sandbox Code Playgroud)

但我真的知道这将是一个字符串

sep*_*p2k 6

通过:string在函数签名的末尾写入,您将声明返回类型string.a推断的类型是string因为您将模式与字符串匹配,因此函数的类型变为string -> string.

大概是你的意思是:string申请a,而不是功能的结果.要实现这一点,你需要用括号括起来,如下所示:

let myFunc (a : string) =
Run Code Online (Sandbox Code Playgroud)

或者,如果要同时指定参数类型和返回类型:

let myFunc (a : string) : bool =
Run Code Online (Sandbox Code Playgroud)