我最初认为“as”和冒号操作符意味着完全相同的事情,为一个值或函数指定一个类型。但我实际上发现不一致:“as”和冒号指定类型之间的区别?
type Uppercase = string -> string
let uppercase:Uppercase = fun n ->
//code
这工作正常。但是,如果我改变冒号为“as”
type Uppercase = string -> string
let uppercase as Uppercase = fun n ->
//code
它打破了,说它不知道什么类型“n”是。当然,我可以通过这样做来解决这个问题
type Uppercase = string -> string
let uppercase as Uppercase = fun (n:string) ->
//code
它又开心了。所以,我的问题是,为什么“as”与冒号不同?为什么F#在使用“as”时无法进行类型推断?谢谢。
关键字'as'与C#中的关键字不同。它与F#中的类型无关。它用于将表达式绑定为单个值,在使用歧视联合时非常有用。 – Gustavo