共用方式為


let 繫結 (F#)

「繫結」(Binding) 會將識別項與值或函式產生關聯。 使用 let 關鍵字可以將名稱繫結至值或函式。

// Binding a value:
let identifier-or-pattern [: type] =
   expression
body-expression
// Binding a function value:
let identifier parameter-list [: return-type ] =
   expression
body-expression

備註

let 關鍵字可在繫結運算式中用來定義一個或多個名稱的值或函式值。 let 運算式最簡單的形式會將名稱繫結至簡單值,如下所示。

let i = 1

如果您使用新行分離運算式與識別項,必須縮排運算式的每一行,如下列程式碼所示。

let someVeryLongIdentifier =
    // Note indentation below.
    3 * 4 + 5 * 6

包含名稱的模式可以指定為 Tuple,而不只是名稱,如下列程式碼所示。

let i, j, k = (1, 2, 3)

body-expression 是使用名稱的運算式。 主體運算式出現在自己的一行,其縮排距離與 let 關鍵字中的第一個字元相同:

let result =
    let i, j, k = (1, 2, 3)
    // Body expression: 
    i + 2*j + 3*k

let 繫結可以出現在模組層級、類別型別的定義或如函式定義的區域範圍中。 在模組或類別型別中最上層的 let 繫結不需要有主體運算式,但在其他範圍層級則需要主體運算式。 繫結名稱可在定義點之後使用,但不可在 let 繫結之前的任何位置使用,如下列程式碼所示。

// Error:
printfn "%d" x  
let x = 100
// OK: 
printfn "%d" x

函式繫結

函式繫結遵循值繫結的規則,不同之處在於函式繫結包含函式名稱和參數,如下列程式碼所示。

let function1 a =
    a + 1

一般而言,參數為模式,例如 Tuple 模式:

let function2 (a, b) = a + b

let 繫結運算式會評估為最後一個運算式的值。 因此,在下列程式碼範例中,result 的值是從 100 * function3 (1, 2) 計算而來,其評估為 300。

let result =
    let function3 (a, b) = a + b
    100 * function3 (1, 2)

型別附註

您可以在括號中放入冒號 (:) 後面接著型別名稱,來指定參數型別。 您也可以在最後一個參數後面附加冒號和型別,來指定傳回值的型別。 function1 以整數做為參數型別的完整型別附註如下。

let function1 (a: int) : int = a + 1

當沒有明確型別參數時,會使用型別推斷來判斷函式的參數型別。 這包含自動將參數型別一般化為泛型。

如需詳細資訊,請參閱自動產生 (F#)型別推斷 (F#)

類別中的 let 繫結

let 繫結可以出現在類別型別中,但不可出現在結構或記錄型別中。 若要在類別型別中使用 let 繫結,此類別必須有主要建構函式。 建構函式參數必須出現在類別定義的型別名稱後面。 類別型別中的 let 繫結會定義該類別型別的私用欄位和成員,再加上型別中的 do 繫結會形成該型別主要建構函式的程式碼。 下列程式碼範例示範具有私用欄位 field1 和 field2 的類別 MyClass。

type MyClass(a) =
    let field1 = a
    let field2 = "text"
    do printfn "%d %s" field1 field2
    member this.F input =
        printfn "Field1 %d Field2 %s Input %A" field1 field2 input

field1 和 field2 的範圍限制為其宣告型別。 如需詳細資訊,請參閱類別中的 let 繫結 (F#)

let 繫結中的型別參數

在模組層級、型別或在計算運算式中的 let 繫結可以具有明確型別參數。 在運算式 (例如函式定義) 中的 let 繫結不可以有型別參數。 如需詳細資訊,請參閱泛型 (F#)

let 繫結上的屬性

屬性可以套用至模組中的最上層 let 繫結,如下列程式碼所示。

[<Obsolete>]
let function1 x y = x + y

請參閱

參考

函式 (F#)

類別中的 let 繫結 (F#)