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 300
değ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ı function1
ve 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ı field1
field2
olan 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 function1
baş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.