前言:最近在了解F#,无意中看到一个日文的教程(http://techbank.jp/Community/blogs/gushwell/default.aspx),觉得很不错,所以希望可以和大家一起分、学习。

这次,我们定义个求3个数平均值的函数:
let Mean a b c = (a + b + c) / 3.0

调用代码如下:
printfn "%f" (Mean 10 20 30)

不好,有个编译错误:The type 'float' does not match the type 'int'.
原因还不是很明白,个人推测如下:
  1. 调用时,Mean的参数类型就确认了。 
  2. 这样就成为了int/double的运算。 
  3. 类型不一样,因此无法计算。 
  4. 出现了编译错误。
这样看来,比C#的类型检查还严格啊。通过下面的这个例子我们就可以理解类型检查的严格了。
let a = 10 + 1.5

还是有错误, 因为类型不一样不能运算。 如下修改后就可以了:
let Mean a b c = double (a + b + c) / 3.0
其中,我们知道了新的东西。上述double就是作为类型转换运算符。
F#中,double是float的别名(大概是),用float替换double也会有同样的结果。

比如,以下的代码是OK的。(引用了
let pi1 = float 3    + 0.1415
let pi2 = double 3 + double 0.1415
printfn "pi1 = %f, pi2 = %f" pi1 pi2
let i1 = int 3.1415
let i2 = int64 3.1415
printfn "i1 = %d, i2 = %d" i1 i2
let byteA = byte (3+4)
printfn "byteA = %d" byteA

结果是:
pi1 = 3.141500, pi2 = 3.141500
i1 = 3, i2 = 3
byteA = 7