请问,有人可以解释为什么这里的函数类型被推断为字符串 - >字符串?
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)
但我真的知道这将是一个字符串
通过: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)