let Bağlamaları

Bağlama, tanımlayıcıyı bir değer veya işlevle ilişkilendirir. Bir değere veya işleve ad bağlamak için anahtar sözcüğünü let kullanırsınız.

Sözdizimi

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

Açıklamalar

anahtar let sözcüğü, bir veya daha fazla ad için değerleri veya işlev değerlerini tanımlamak üzere bağlama ifadelerinde kullanılır. İfadenin let en basit biçimi, bir adı aşağıdaki gibi basit bir değere bağlar.

let i = 1

İfadeyi tanımlayıcıdan yeni bir satır kullanarak ayırırsanız, aşağıdaki kodda olduğu gibi ifadenin her satırını girintili olarak girintili olarak belirtmeniz gerekir.

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

Yalnızca bir ad yerine, aşağıdaki kodda gösterildiği gibi adlar içeren bir desen( örneğin, bir tanımlama grubu) belirtilebilir.

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

Gövde ifadesi, adların kullanıldığı ifadedir. Gövde ifadesi kendi satırında görünür ve tam olarak anahtar sözcüğündeki ilk karakterle let hizalanmış şekilde girintili olarak görünür:

let result =

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

    // Body expression:
    i + 2 * j + 3 * k

Bağlama let modül düzeyinde, sınıf türünün tanımında veya işlev tanımı gibi yerel kapsamlarda görüntülenebilir. Bir let modüldeki veya sınıf türündeki en üst düzeydeki bağlamanın gövde ifadesi olması gerekmez, ancak diğer kapsam düzeylerinde gövde ifadesi gereklidir. İlişkili adlar tanım noktasından sonra kullanılabilir, ancak aşağıdaki kodda gösterildiği gibi bağlama görünmeden önce let herhangi bir noktada kullanılamaz.

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

İşlev Bağlamaları

İşlev bağlamaları, aşağıdaki kodda gösterildiği gibi işlev adı ve parametreleri içermesi dışında, değer bağlamaları için kuralları izler.

let function1 a = a + 1

Genel olarak parametreler, tanımlama grubu deseni gibi desenlerdir:

let function2 (a, b) = a + b

Bağlama let ifadesi, son ifadenin değerini değerlendirir. Bu nedenle, aşağıdaki kod örneğinde değeri result olarak değerlendirilen 300değerinden 100 * function3 (1, 2)hesaplanır.

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

Daha fazla bilgi için bkz . İşlevler.

Tür Ek Açıklamaları

Parametrelerin türlerini belirtmek için iki nokta üst üste (:) ve ardından bir tür adı ekleyebilirsiniz; bunların tümü parantez içindedir. Ayrıca, son parametreden sonra iki nokta üst üste ve tür ekleyerek dönüş değerinin türünü belirtebilirsiniz. için tam tür ek açıklamaları function1ve parametre türü olarak tamsayılar aşağıdaki gibi olacaktır.

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

Açık tür parametresi olmadığında, işlev parametrelerinin türlerini belirlemek için tür çıkarımı kullanılır. Bu, bir parametrenin türünü genel olacak şekilde otomatik olarak genelleştirmeyi içerebilir.

Daha fazla bilgi için bkz . Otomatik Genelleştirme ve Tür Çıkarımı.

Sınıflardaki let Bağlamaları

Bağlama let bir sınıf türünde görünebilir, ancak bir yapı veya kayıt türünde görüntülenmez. Sınıf türünde let bağlaması kullanmak için sınıfın birincil oluşturucuya sahip olması gerekir. Oluşturucu parametreleri, sınıf tanımındaki tür adından sonra görünmelidir. Bir let sınıf türündeki bağlama, bu sınıf türü için özel alanları ve üyeleri tanımlar ve türdeki bağlamalarla do birlikte türün birincil oluşturucusunun kodunu oluşturur. Aşağıdaki kod örneklerde ve özel alanları field1field2olan bir sınıf MyClass gösterilmektedir.

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

ve field2 kapsamlarıfield1, bildirildiği türle sınırlıdır. Daha fazla bilgi için bkz let . Sınıflarda ve Sınıflarda Bağlamalar.

let Bağlamaları'nda Tür Parametreleri

Modül let düzeyinde, bir türdeki veya hesaplama ifadesindeki bağlamanın açık tür parametreleri olabilir. İşlev tanımı içinde olduğu gibi bir ifadedeki let bağlaması tür parametrelerine sahip olamaz. Daha fazla bilgi için bkz . Genel Bilgiler.

let Bağlamaları üzerindeki öznitelikler

Öznitelikler, aşağıdaki kodda gösterildiği gibi bir modüldeki üst düzey let bağlamalara uygulanabilir.

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

Let Bağlamalarının Kapsamı ve Erişilebilirliği

Let bağlaması ile bildirilen bir varlığın kapsamı, bağlama göründükten sonra kapsayan kapsamın (işlev, modül, dosya veya sınıf gibi) bölümüyle sınırlıdır. Bu nedenle, let bağlamasının bir kapsama bir ad tanıttığını söylenebilir. Modüldeki let bağlamaları modülün genel işlevlerine derlendiğinden, modüle erişilebildiği sürece modüle bağlı bir değere veya işleve modülün istemcileri erişebilir. Buna karşılık, bir sınıftaki bağlamaların sınıfına özel olmasına izin verin.

Normalde modüllerdeki işlevlerin istemci kodu tarafından kullanıldığında modül adıyla nitelenmiş olması gerekir. Örneğin, bir modülün Module1 işlevi varsa, kullanıcılar işleve function1başvurmayı belirtebilir Module1.function1 .

Modülün kullanıcıları, modül adıyla nitelenmeden bu modüldeki işlevleri kullanılabilir hale getirmek için bir içeri aktarma bildirimi kullanabilir. Az önce bahsedilen örnekte, modülün kullanıcıları bu durumda içeri aktarma bildirimini open Module1 kullanarak modülü açabilir ve ardından doğrudan başvurabilir function1 .

module Module1 =
    let function1 x = x + 1.0

module Module2 =
    let function2 x =
        Module1.function1 x

open Module1

let function3 x =
    function1 x

Bazı modüller RequireQualifiedAccess özniteliğine sahiptir. Bu, kullanıma verdikleri işlevlerin modülün adıyla nitelenmiş olması gerektiği anlamına gelir. Örneğin, F# Listesi modülü bu özniteliğe sahiptir.

Modüller ve erişim denetimi hakkında daha fazla bilgi için bkz . Modüller ve Erişim Denetimi.

Ayrıca bkz.