Sadece type somename
kullanarak tanımlayan türün F # içinde çalışmayacağını düşünüyorum. F # derleyicisinin, bildiriden bazı .NET türlerini oluşturması gerekiyor ve F # belirtimi, fantom türleri için ne olması gerektiğini açıkça belirtmiyor.
Uygulama dosyasında (.fs) bir beton türü (ör. type somename = ReadOnlyDummyValue
) oluşturabilir ve arabirim dosyasına (.fsi) yalnızca type somename
ekleyerek türün içeriklerini gizleyebilirsiniz. Bu şekilde bir hayalet tipine oldukça yaklaşırsınız - dosyanın dışındaki kullanıcı türün iç kısımlarını görmez.
Arabirimleri başka bir çekici alternatif kullanmak olacaktır. Bu bana mantıklı geliyor, çünkü boş arayüz muhtemelen bildirebileceğiniz en basit tiptir (ve herhangi bir kukla tanımlayıcı sunmuyor). Sonra tip Ref<CanRead, int>
değerlerini alabilir bir işlev yazabilirsiniz
type CanReadWrite =
inherit CanRead
inherit CanWrite
:
type CanRead = interface end
type CanWrote = interface end
ilginç şey, bu durumda, siz de kalıtsal arayüzleri oluşturabileceğiniz anlamına gelir: Boş arayüz şöyle aynı zamanda (bu değerler de okuma desteklemek için) tip Ref<CanReadWrite, int>
ait değerleri:
let foo (arg:Ref<#CanRead, int>) = // ...
Bu u olabilir bir şey gibi görünüyor İçindek iler. Bunun OCaml'da da yapılıp yapılmayacağıyla ilgilenirim (çünkü arayüzler ve kalıtım için F # desteğine dayanır).
http://blog.matthewdoig.com/?p=134 ve http://blog.matthewdoig.com/?p=138 okudunuz mu? –
Bağlantılar için teşekkürler. Bunları bir şekilde özledim. –
matthewdoig adlı kullanıcının blogu öldü, ancak makaleler arşiv.org adresinde bulunuyor: http://web.archive.org/web/20100615031828/http://blog.matthewdoig.com/?p=134 http: //web.archive .org/web/20100615031841/http: //blog.matthewdoig.com/? p = 138 –