Bağlar (F#) olanak sağlar
A bağlama bir tanımlayıcı değerini veya işlevi ile ilişkilendirir. Kullandığınız let bir ad değeri ya da işlev bağlamak için anahtar sözcük.
// Binding a value:
let identifier-or-pattern [: type] =
expression
body-expression
// Binding a function value:
let identifier parameter-list [: return-type ] =
expression
body-expression
Notlar
let Anahtar sözcüğünü bağlamasındaki ifadeler değerleri veya adları bir veya daha çok işlevi değerleri tanımlamak için kullanılır. En basit şekliyle, let ifadesi bir ad gibi basit bir değere bağlar.
let i = 1
Yeni bir satır kullanarak tanımlayıcıyı ifadeden ayırmak, aşağıdaki kodda olduğu gibi ifadenin her satırı girintileyin gerekir.
let someVeryLongIdentifier =
// Note indentation below.
3 * 4 + 5 * 6
Bir ad yerine yalnızca adlarını içeren bir desen, kayıt düzeni, örneğin aşağıdaki kodda gösterildiği gibi belirtilebilir.
let i, j, k = (1, 2, 3)
body-expression Adları kullanılan ifade. Gövde ifade tam olarak ilk karakteri ile kurmak için satırı girintili, kendi satırında görünen let anahtar sözcük:
let result =
let i, j, k = (1, 2, 3)
// Body expression:
i + 2*j + 3*k
A let bağlama görüntülenebilir sınıf türü tanımı veya yerel kapsam modül düzeyinde bir işlev tanımı gibi. A let en üst düzeydeki bir modül veya sınıf türü bağlama gövde ifade olması gerekmez, ancak diğer kapsam düzeylerinde gövde ifade gereklidir. Noktası tanımı, ancak herhangi bir noktasından sonra ilişkili adlar kullanılabilir let aşağıdaki kodda gösterildiği gibi bağlama görünür.
// Error:
printfn "%d" x
let x = 100
// OK:
printfn "%d" x
İşlev bağlar
İşlev bağları aşağıdaki kodda gösterildiği gibi işlev adı ve parametreler dahil dışında işlev bağlamaları değeri bağlar kurallarına.
let function1 a =
a + 1
Genel olarak, kayıt düzeni desen gibi desenleri Parametreler şunlardır:
let function2 (a, b) = a + b
A let son ifadenin değeri için bağlama deyimi değerlendirir. Bu nedenle de aşağıdaki kod örneği, değeri result tarafından hesaplanan 100 * function3 (1, 2), hangi değerlendirir 300.
let result =
let function3 (a, b) = a + b
100 * function3 (1, 2)
Daha fazla bilgi için bkz. İşlevler (F#).
Tür ek açıklamaları
İki nokta (:) parantez içinde tüm kapalı, tür adı arkasından. ekleyerek türleri için parametreleri belirtebilirsiniz. Sonra son parametre türü ve iki nokta üst üste ekleyerek, sonuç değerinin tipini de belirleyebilirsiniz. Tam tür ek açıklamaları için function1, parametre türleri olarak tamsayılar ile şu şekilde olacaktır.
let function1 (a: int) : int = a + 1
Hiçbir açık tür parametreleri olduğunda tür kesmesi parametreleri işlevlerin türlerini belirlemek için kullanılır. Genel olarak bir parametre türü otomatik olarak işlem genelleştirme içerebilir.
Daha fazla bilgi için, bkz. Otomatik genelleştirmesi (F#) ve Tür kesmesi (F#).
Sınıflar bağlarında olanak sağlar.
A let bir sınıf türü ancak yapısı veya kayıt türü bağlama görüntülenebilir. Bağlama bir sınıf türü let kullanmak için sınıf birincil bir oluşturucusu olmalıdır. Yapıcı parametreleri, sınıf tanımının tür adı sonra yer almalıdır. A let sınıf türü bağlamasının tanımlayan özel alanlar ve üyeleri sınıfı türü ve birlikte do türü bağlarında birincil yapıcı türü kodu oluşturur. Aşağıdaki kodu bir sınıf örnekler MyClass özel alanları ile field1 ve field2.
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
Kapsamlar, field1 ve field2 , bunlar bildirilen türü sınırlıdır. Daha fazla bilgi için, bkz. Sınıflar (F#) bağlarında olanak sağlar ve Sınıflar (F#).
Tür parametreleri bağlamaları olanak sağlar.
A let bağlama türü veya bir hesaplama ifadesi modül düzeyinde açık tür parametreleri olabilir. Bir ifade gibi bir işlev tanımı bağlama let tür parametreleri olamaz. Daha fazla bilgi için bkz. Generics (F#).
Bağları öznitelikleri bildirmek
Öznitelikler uygulanabilir çok üst düzey let modülünde aşağıdaki kodda gösterildiği gibi bağlar.
[<Obsolete>]
let function1 x y = x + y
Kapsam ve erişilebilirliğini Let bağlar
Organizayonunuzdaki bağlama ile bildirilmiş bir varlık kapsamını içeren bölümüne sınırlı kapsamı (bir işlevi, modül, dosya veya sınıf gibi) bağlama görüntülendikten sonra. Bu nedenle, organizayonunuzdaki bağlama bir ad kapsamı tanıtır söylenebilir. Bir modül organizayonunuzdaki bağlarında ortak modülündeki işlevlerin derlenmiş beri modülü erişilebilir olduğu sürece bir modülde let sınır değerini veya işlevi modül istemcilere erişilemez. Bunun tersine, bir sınıf organizayonunuzdaki bağlarında sınıfa özel.
Normalde modüllerindeki işlevler istemci kodu tarafından kullanılan modül adını uygun olmalıdır. Örneğin, bir modül, Module1 bir işlevi vardır function1, kullanıcıların belirtirsiniz Module1.function1 işlevine başvurmak.
Kullanıcılar bir modülün import bildirimini modül adına göre nitelikli bu modül içinde işlevleri kullanmak için kullanılabilir hale getirmek için kullanabilirsiniz. Örnekte, yalnızca belirtilen kullanıcılar modülü durumda modülü alma bildirimi açık kullanarak açabilirsiniz Module1 ve bundan sonra function1 doğrudan.
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 özniteliğine sahip RequireQualifiedAccess, sundukları işlevler modülün adı nitelenmiş olmalıdır anlamına gelir. Örneğin, F# listesi modülü bu özniteliği vardır.
Modüller ve erişim denetimi hakkında daha fazla bilgi için bkz: Modüller (F#) ve Erişim denetimi (F#).