<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title>DongPad</title><link>http://www.dongpad.com</link> <description>Every day is a new beginning!</description><copyright>2.0 beta 03</copyright> <language>zh-cn</language><item><title>F# Type Tips</title><description><![CDATA[<p>F#有强大的类型推理（type inference），所以在F#中不需要我们显示指定参数类型。如 <font color="#ff0000"><strong>let add p1 p2 = p1+p2;;</strong></font> 这样我们就定义了接收两个int类型参数返回int类型的一个add函数：<font color="#ff0000"><strong>val add : int -> int –> int</strong></font>，这个推理过程是由f#编译器完成的。</p>  <p>因为F#不使用隐式类型转换,所以如果我们对add传入float类型参数，如：add 100.0 200.0，编译将产生如下错误：</p>  <p><strong><font color="#de96a0">stdin(46,5): error FS0001: This expression has type float but is here used with type int</font></strong></p>  <p>因此这里需要显示指定参数的类型，方式如：<font color="#ff0000"><strong>let add2 (p1:float)&#160; p2 = p1+p2;;</strong></font> 这样编译器推理出add2函数接受两个float类型参数并返回float类型：<font color="#ff0000"><strong>val add2 : float -> float -> float</strong></font>。虽然在这里没有显示指定add2的p2参数类型，但是因为显示指定了F#的第一个参数为float类型,p2自然也就被推理为float类型了。因此如果有不同类型的参数，应该为这些参数都显示指定类型，add3接受一个float和一个int类型参数，并返回两个参数的连接形式string：<strong><font color="#ff0000">let add3 (p1:float) (p2:int)=(string p1)+(string p2)</font></strong>，编译器编译结果为：<font color="#ff0000"><strong>val add3 : float -> int -> string</strong></font>，在这里要注意的就是(string p1)，它的意思是对p1进行强制转换。</p>  <p>积硅步以至千里。</p>]]></description><author>Jack</author><link>http://www.dongpad.com/FSharp-20100624-254.html</link><pubdate>2010-6-24 12:51:43</pubdate></item></channel></rss>
