请有人解释为什么函数类型被推断为字符串 - >字符串?
let myFunc a:string =
match a with
| "A" -> 1
| _ -> 0
当参数是通用的时,这可以正常工作,但是一旦我添加:string,类型就会改变。为什么呢?
修改 我想声明参数类型是一个字符串,因为我实际上想要使用String.ToUpper()进行匹配:
let myFunc a:string =
match a.ToUpper() with
| "A" -> 1
| _ -> 0
有点尴尬的解决方案,就是这个
let myFunc a =
match a.ToString().ToUpper() with
| "A" -> 1
| _ -> 0
但我真的知道它会是一个字符串
答案 0 :(得分:6)
通过在函数签名末尾写:string
,您将返回类型声明为string
。 a
的类型被推断为string
,因为您将其与字符串进行模式匹配,因此函数的类型变为string -> string
。
据推测,您的意思是:string
适用于a
,而不是函数的结果。要实现这一点,你需要用括号括起来:
let myFunc (a : string) =
或者,如果要同时指定参数类型和返回类型:
let myFunc (a : string) : bool =