Sends for the fellow dear visitors:
Welcome to DongPad!
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进行强制转换。
积硅步以至千里。
Powered By DongPad CopyRight 2008-2011, xhtml | css
Processed in 0.046 seconds(s) , 沪ICP备08111450号