Scala yüksek kinded türü nedir?
Web üzerinde aşağıdaki bulabilirsiniz:
Yüksek kinded type == type yapıcı?
class AClass[T]{...} // For example, class List[T]Bazıları bu yüksek kinded bir tip, öyle diyorum çünkü tanımı ile uyumlu olan türleri içinde özetler.
Yüksek kinded türleridiğer türleri, alan türleri ve yeni bir tür oluşturmak
Bu halde de bilinirtip kurucu. (Programming in Scala örneğin,).
== Tip yapıcı bir türü olarak yazın yapıcı aldığı yüksek kinded türü parametre?
Gazetede Generics of a Higher Kind, okuyabilirsiniz
... tür soyut tip tip soyut (yüksek-kinded türleri') ..."
gösteriyor
class XClass[M[T]]{...} // or trait YTrait[N[_]]{...} // e.g. trait Functor[F[_]]yüksek kinded bir türüdür.
Bu düşünceyle, zor ayırt etmektirtip kurucu,yüksek kinded yazınvetürü türü parametre olarak kurucular alır hangi tür yapıcıbu nedenle soru yukarıda.
CEVAP
Bana biraz anlam ayrımı ile atış yaparak bu karışıklık bazı başlangıç telafi etmeme izin ver. Değerini insanlar daha aşina olma eğilimi gibi bu açıklamak seviyeye benzetme kullanmak ister.
Yapıcı tür bağımsız değişkeni için geçerli bir tür, bir tür "inşa" bir tip.
Değer oluşturucu bağımsız değişken için bir değer". oluşturmak için geçerli bir değerdir
Değer kurucular genellikle denir "fonksiyonlar" ya da "yöntem". Bu "kurucular" da dedi ki "çok biçimli" (çünkü onlar için kullanılabilir inşa "şeyler" farklı "şekil") ya da "soyut" (çünkü onlar soyut ne değişir arasında farklı polimorfik örneklemesi).
Soyutlama bağlamında/, birinci dereceden" soyutlama: bir tür üzerinde soyut, ama bu tür kendi içinde soyut bir şey olamaz. bir kez kullanın "tek anlamına gelir polimorfizmi Java 5 jenerik birinci dereceden.
Yukarıdaki emri İlk Yorum soyut özellikleri vardır:
Yapıcı, doğru tür bağımsız değişkeni için geçerli bir tür, bir tür "inşa" uygun bir tip.
Değer oluşturucu uygun değeri bağımsız değişkenler için "" uygun bir değer. oluşturmak için geçerli bir değerdir
Vurgulamak için yok soyutlama dahil (öyle de diyebilirsin bu "zero-order", ama ben görmedim bu kullanılan her yerde) gibi değeri 1 veya türü String, biz genellikle bir şey söyle, bir "doğru" ya da değeri yazın.
Uygun bir değer "hemen" bağımsız değişkenler (onlar üzerinde soyut değil) için bekleyen değil, o anlamda. kullanılabilir Kolayca yazdırabilirsiniz değerleri kontrol olarak (fonksiyon seri hile!) düşünüyorum.
Düzgün bir tipi bir tipi olan sınıflandırır değerleri (değer kurucular dahil), tip kurucular değil sınıflandırmak değerleri (ilk ihtiyacı uygulanacaksa doğru tür bağımsız değişkenleri için verim düzgün yazın). Bir tür oluşturmaya, düzgün bir tip olması gerekli (ama yeterli değil). (Soyut bir sınıf, ya da erişim yok bir sınıf olabilir.)
"Üst düzey" sadece polimorfizmi/soyutlama tekrar kullanmak anlamına gelen Genel bir terimdir. Polimorfik türleri ve değerleri için aynı anlama geliyor. Somut olarak, bir şey üzerinde bir şey üzerinde bu özetler sırası üst seviyeden bir özet. Türleri için, dönem "yüksek kinded" daha genel özel amaçlı bir sürümü "üst düzey".
Böylece, bizim karakterizasyon üst düzey versiyonu olur:
Bir tür kurucu türü değişkenler (uygun tip veya tip kurucular) "" uygun bir tip (kurucu). oluşturmak için uygulanan bir türü.
Değer oluşturucu bağımsız değişken (uygun değerleri veya değer kurucular) "" uygun bir değer (kurucu). oluşturmak için geçerli bir değerdir
Böylece, "üst düzey" sadece "dediğin zaman" anlamına gelir özetleme X", gerçekten demek! Soyutlanmış bitti X kendi kaybetmez "soyut hak": bunu istiyor. soyut olabilir (Bu arada, kullandığım fiil "soyut" burada kötü: bırakmak dışında bir şey değildir temel tanımı için bir değer ya da yazın olması çeşitli/kullanıcı tarafından sağlanan soyutlanması gibi bir tartışma.)
İşte bazı örnekler (e-posta ile Lutz sorularını esinlenerek) uygun, birinci mertebe ve yüksek dereceden değerleri ve türleri:
proper first-order higher-order
values 10 (x: Int) => x (f: (Int => Int)) => f(10)
types (classes) String List Functor
types String ({type λ[x] = x})#λ ({type λ[F[x]] = F[String]})#λ
Kullanılan sınıfları şu şekilde belirlenmiştir:
class String
class List[T]
class Functor[F[_]]
Önlemek için yönlendirme ile sınıfların tanımlanması gerekir bir şekilde ifade anonim tür fonksiyonlar, değil ifade doğrudan, Scala, ama kullanabilirsiniz yapısal türleri olmadan çok fazla cümle Tepegöz (#λtarzı nedeniyle http://stackoverflow.com/users/160378/retronym afaık):
Anonim tür fonksiyonları destekleyen Scala bazı varsayımsal gelecek sürümünde, bu örneklerden son satıra kısaltmak olabilir:
types (informally) String [x] => x [F[x]] => F[String]) // I repeat, this is not valid Scala, and might never be
(Kişisel bir not, hiç bahsetti pişmanım "yüksek kinded türleri", sadece tipler sonuçta! Ne zaman ihtiyacın belirsizliği ortadan kaldırmak için, öneririm şeyler söylediğin gibi "yapıcı parametre tipi", "tip kurucu üyesi", ya da "tür yapıcı alias" vurgulayan konuşmuyorsun, sadece doğru tür.)
ps: karmaşık meseleleri daha da, "polimorfik" belirsiz farklı bir şekilde, bu yana bir polimorfik tür bazen anlamına gelir evrensel bir sayısal tür, gibi Forall T, T => T olan düzgün yazın bu yana sınıflandırır polimorfik değerleri (Scala, bu değer yazılabilir olarak yapısal tip {def apply[T](x: T): T = x})

Doğru JSON içerik türü nedir?...
Bir Dizi hassas kaybetmeden git o Java...
C standart devlet int boyutu, uzun tür...
Pptx vb docx için doğru mıme türü nedi...
Ham bir türü nedir ve neden't kul...