F#入门-第二章 F#基础-第四节 let语句-值的绑定

    这一节针对let语句进行说明。
    let语句是变量赋值以及对变量进行函数定义的语句。
    因为函数也可以用let语句来进行定义,所以let语句在F#中是十分重要的。
    因为变量一旦赋了值就不能更改,所以在let语句中倒更象是常量定义。
    let语句如下所示

let示例语句1 
let num = 3;;              //变量赋值
let inc x = x + 1;;        //函数定义           


    分别表示:
    将数值3绑定给变量num。
    将“传入的数值加1后返回”定义成函数绑定给变量inc。

    关于函数,在下一节“let语句-函数定义”中做说明。

let示例语句2
let num2 = 3 in num2 + 4;;
let square x = x * x in square 5;;


    这里也同样如此,利用绑定的值进行计算,结果如下所示。

执行结果 
> let num2 = 3 in num2 +4;;
val it : int = 7
> let square x = x * x in square 5;;
val it : int = 25


    使用in的时候,in前面的变量值只在in的同一语句中有效。这个称之为变量的有效范围。

变量值的有效范围 
let a = 10 in
print_int a;          //a是有效的
print_int a;;        //因为只用;做了区分,仍在同一语句中,所以这里的a仍然有效。

let a = 10 in print_int a;;       //a是有效的 print_int a;;      //这里的a已在另一语句中,所以这里a已经无效。编译时报错


    变量值的有效范围被后面的let语句所覆盖。
    被覆盖掉的变量范围内的变量值,在变量范围被覆盖时被隐藏起来。

变量范围的覆盖
let a = 10 in
let a = 20 in
print_int a;;


    执行这段代码后,最初的a的值10被隐藏,所以a的值显示为20。
    同时,顶级的变量如果被第二次绑定,F#中被视为语法错误。

编译错误 
let a = 1;;
let a = 2;;
→error: FS0037: Duplicate definition of value 'a'


    但是,为了方便起见,在解释器fsi中,并不视为错误。以上两句代码都可以正常执行。

posted @ 2010-09-29 15:47  至尊无上  阅读(1465)  评论(2)    收藏  举报