Sends for the fellow dear visitors:welcome to dongpad!


 Welcome to DongPad!

 msn


F# Type Tips

F#有强大的类型推理(type inference),所以在F#中不需要我们显示指定参数类型。如 let add p1 p2 = p1+p2;; 这样我们就定义了接收两个int类型参数返回int类型的一个add函数:val add : int -> int –> int,这个推理过程是由f#编译器完成的。

因为F#不使用隐式类型转换,所以如果我们对add传入float类型参数,如:add 100.0 200.0,编译将产生如下错误:

stdin(46,5): error FS0001: This expression has type float but is here used with type int

因此这里需要显示指定参数的类型,方式如:let add2 (p1:float)  p2 = p1+p2;; 这样编译器推理出add2函数接受两个float类型参数并返回float类型:val add2 : float -> float -> float。虽然在这里没有显示指定add2的p2参数类型,但是因为显示指定了F#的第一个参数为float类型,p2自然也就被推理为float类型了。因此如果有不同类型的参数,应该为这些参数都显示指定类型,add3接受一个float和一个int类型参数,并返回两个参数的连接形式string:let add3 (p1:float) (p2:int)=(string p1)+(string p2),编译器编译结果为:val add3 : float -> int -> string,在这里要注意的就是(string p1),它的意思是对p1进行强制转换。

积硅步以至千里。



评论: 0 | 引用: 0 | 查看次数: 1103 | 返回顶部
发表评论
昵 称:    
验证码:   
 
内 容:
选 项:  
 
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 500 字 | UBB代码 开启 | [img]标签 开启