İlk not:
Bu soru birkaç düzenlemeden sonra kapatıldı, çünkü aradığım şeyi doğru bir şekilde ifade etmek için uygun terminolojiden yoksundum. Sam Tobin-Hochstadt daha sonra tam olarak ne olduğunu anlamamı sağlayan bir yorum yayınladı: fonksiyon dönüş değerleri için kavşak tiplerini destekleyen programlama dilleri.
Şimdi soru yeniden açıldığına göre, (umarım) daha kesin bir şekilde yeniden yazarak soruyu geliştirmeye karar verdim. Bu nedenle, aşağıdaki bazı yanıtlar ve yorumlar artık önceki düzenlemelere atıfta bulundukları için mantıklı olmayabilir. (Lütfen bu gibi durumlarda sorunun düzenleme geçmişine bakın.)
İşlev döndürme değerleri için kesişim türlerini destekleyen popüler statik ve kuvvetle yazılan programlama dilleri (Haskell, genel Java, C #, F # vb.) Var mı ? Varsa, hangisi ve nasıl?
(Dürüst olursam, birisinin C # veya Java gibi anaakım bir dilde kesişim türlerini nasıl ifade etmenin bir yolunu gösterdiğini görmek isterim.)
Ben C # benzer bazı sözde kodunu kullanarak, kavşak türleri nasıl görünebilir hızlı bir örnek vereceğim:
interface IX { … }
interface IY { … }
interface IB { … }
class A : IX, IY { … }
class B : IX, IY, IB { … }
T fn() where T : IX, IY
{
return … ? new A()
: new B();
}
Olduğunu, fonksiyon fn
bazı türünde bir örnek verir T
arayan o arabirimleri uygulayan tek bildiği üzere, IX
ve IY
. (Yani, jeneriklerden farklı olarak, arayan somut türü seçemez T
- işlev yapar. Bundan T
, aslında evrensel bir tür değil, varoluşsal bir tür olduğunu varsayalım .)
Not: Bir basit bir tanımlayabiliriz farkındayım interface IXY : IX, IY
ve dönüş türünü değiştirmek fn
için IXY
. Bununla birlikte, bu gerçekten aynı şey değildir, çünkü genellikle ek bir arabirime yalnızca IXY
önceden ve ayrı olarak A
uygulanan daha önce tanımlanmış bir türe cıvatalayamazsınız .IX
IY
Dipnot: Kavşak tipleri ile ilgili bazı kaynaklar:
"Tip sistemi" için Wikipedia makalesinde kesişim türleri hakkında bir alt bölüm vardır .
Benjamin C. Pierce (1991), "Kavşak Tipleri, Birlik Tipleri ve Çok Biçimlilikle Programlama" Raporu
David P. Cunningham (2005), "Uygulamada kavşak türleri" , Wikipedia makalesinde bahsedilen Forsythe dili hakkında bir vaka çalışması içerir.
Bir yığın taşması soru "Birlik türleri ve kavşak türleri" aralarında birkaç iyi cevap var bu bir yukarıda mayın benzer kavşak tipleri yalancı kod örnek verir.
T
arayüzün I
tüm yöntemlerini uyguladığında, ancak bu arayüzü bildirmediğinde, arayüzün işlem görmesine izin verdiğini" olarak değiştirir.
T
sadece "/ uygular uzanan bir tür olarak işlev bildiriminde tanımlanan olsa bile, bir tür tanımlarIX
veIY
". Aslında gerçek dönüş değeri bunun özel bir durumudur (A
veyaB
sırasıyla) sadece de kullanarak kazanmasını sağlayabilecek, burada özel bir şey değilObject
yerineT
.