Tür parametreleri (F#) statik olarak çözüldü
A Tür parametresi'statik olarak çözümlenen ile gerçek bir türü derleme zamanında yerine çalışma zamanında yerine bir tür parametresidir. Bunlar bir şapka (^) simgesi gelir.
ˆtype-parameter
Notlar
F# dili, iki farklı tür tür parametreleri vardır. İlk tür standart genel tür parametresidir. Kesme işareti ('), bu gibi gösterilir 'T ve 'U. Bunlar, diğer genel türde parametreler için eşdeğerdir.net Framework diller. Diğer bir statik olarak çözümlenir ve gibi bir şapka tarafından belirtilen ^T ve ^U.
Statik olarak çözümlenen bir tür parametreleri, bir tür bağımsız değişkeni kullanılmak üzere belirli bir üye veya üye'ı olmalıdır belirtmenize olanak veren kısıtlamaları olan üye kısıtlamaları ile birlikte öncelikle yararlıdır. Normal genel bir tür parametresiyle kullanarak bu tür bir kısıtlama oluşturmak için yolu yoktur.
Arasındaki benzerlikler ve farklar iki tür parametreleri türleri aşağıdaki tabloda özetlenmiştir.
Özellik |
Genel |
Statik olarak çözüldü |
---|---|---|
Sözdizimi |
'T, 'U |
^T, ^U |
Çözüm süresi |
Çalışma süresi |
Derleme zamanı |
Üye kısıtlamaları |
Üye kısıtlamaları ile kullanılamaz. |
Üye kısıtlamaları ile kullanılabilir. |
Kod oluşturma |
Standart genel tür parametreleri olan bir türü (veya yöntem) tek bir genel tür veya yöntem nesil içinde sonuçlanır. |
Birden çok türleri ve yöntemleri işlemlerinden üretilen, aşağıdakilerden her türü için gereklidir. |
Türleriyle kullanın |
Türlerinde kullanılabilir. |
Türlerinde kullanılamaz. |
Satır içi işlevleri ile kullanmak |
Hayır Bir satır içi işlevi, standart genel bir tür parametresiyle parametreleştirilmiş olamaz. |
Evet. Statik olarak çözümlenen bir tür parametreleri, işlevleri veya satır içi olmayan yöntemleri kullanılamaz. |
Birçok F# Çekirdek Kitaplığı işlevlerini, özellikle işleçleri, statik tür parametreleri çözdünüz demektir. Bu işlevler ve işleçler satır içi ve verimli kod oluşturma sayısal hesaplamaları için neden.
Satır içi yöntemleri ve işleçler kullanan veya statik türde parametreler çözmüş diğer işlevleri kullanan işlevleri statik olarak çözümlenen bir tür parametreleri kendileri de kullanabilirsiniz. Genellikle, tür kesmesi gibi satır içi işlevleri statik tür parametreleri çözmüş yorumlar. Aşağıdaki örnekte, statik olarak çözümlenen bir tür parametresi için olayla bir işleç tanımı gösterilmektedir.
let inline (+@) x y = x + x * y
// Call that uses int.
printfn "%d" (1 +@ 1)
// Call that uses float.
printfn "%f" (1.0 +@ 0.5)
Çözümlenen türü (+@) her iki kullanımda temel (+) ve (*), her iki hangi tür kesmesi statik olarak çözümlenen bir tür parametreleri üye kısıtlamalar gerçekleştirip neden olan. Çözümlenen türü F# yorumlayıcı, gösterildiği gibidir.
^a -> ^c -> ^d
when (^a or ^b) : (static member (+) : ^a * ^b -> ^d) and
(^a or ^c) : (static member (+) : ^a & ^c -> ^b)
Çıktı aşağıdaki gibidir.
2
1.500000