0

拜托,有人能解释一下为什么这里的函数类型被推断为字符串->字符串吗?

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

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

4

1 回答 1

6

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

大概您的意思是:string应用于a,而不是函数的结果。要实现这一点,您需要用括号括起来,如下所示:

let myFunc (a : string) =

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

let myFunc (a : string) : bool =
于 2013-05-15T22:19:46.070 回答