维基F#译文: 值与函数(上)

原文地址:http://en.wikibooks.org/wiki/F_Sharp_Programming

1. 声明变量

1.1 值是值,变量是变量

在F#里最常见的关键字就是let,用来声明变量或是函数。 举例如下:

let x = 5
let y = 10
let z = x + y

 这样就声明了x,y,然后分别赋值。最后z等于x加y的值。 然后你可以再把它们打印出来

printfn "x: %i" x
printfn "y: %i" y
printfn "z: %i" z

 最后输出的结果是什么,到FSI里试下就知道了。 记得不要忘记,在FSI里要在程序的最后加两个分号,这样才能执行你的程序。

最后再来看下值和变量的区别。

let w = 5

 这里先定义w等于5。好了,现在你再把6赋值给w,看看会发生什么!

w = 6

val it : bool = false

这里的=等已经不再是赋值操作了,而是对比。这里其实就是说,w的值是5,现在说,5是不是等于6,显然不等,所以返回了一个布尔值,假(FALSE).

所以如果你要给w赋值的话,应该如前面说的那样用let。

let w = 100

 但其实这样并不是真正的赋值,他只是给w重新绑定过了一个值,而不是找到内存中原来w的值,也就是5,然后把5修改为100。那如果我要真正的改这个值呢,那就得用 <-

w <- 99

但是这样你会得到一个错误

error FS0027: This value is not mutable

F#说这个值是不可变的。原来在F#里,其实应该说要函数式编程语言里,变量其实都是不可变。所以你会得到这个这个错误。那你也许就会问,<- 这个操作岂不是没用的?其实F#是一种多重范式的语言,它是支持真正的变量的。但是它默认你声明的变量是不可变的(immutable)。那我们怎么声明可变的变量,这里就要用到另一个关键字 mutable

let mutable i = 100;;

val mutable i : int = 100

这样就定义一个可变变量i,现在你再给i赋值

i <- 999;;
val it : unit = ()
i;;
val it : int = 999

为什么函数式语言的变量是不可变的?简单来说,这其实函数式语言的优势,现在来说可能很难理解。以后自然会明白,不过好在F#并不是纯的函数式语言,要不然可能上手的难度会大很多。

原文地址:https://www.cnblogs.com/tuwenmin/p/2649211.html