匹配中的函数类型推断

时间:2013-05-15 22:16:01

标签: f#

请有人解释为什么函数类型被推断为字符串 - >字符串?

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

但我真的知道它会是一个字符串

1 个答案:

答案 0 :(得分:6)

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

据推测,您的意思是:string适用于a,而不是函数的结果。要实现这一点,你需要用括号括起来:

let myFunc (a : string) =

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

let myFunc (a : string) : bool =