Bazen, y
ile aynı türde olmak üzere x
bildirilmesi istenebilir. vals
tür çıkarımı ile bu çok iyi işler, ancak bu, with function types gibi diğer bazı alanlarda çalışmaz. Bazı C++ deneyimlerine sahip bir programcı için belirgin görünen bir çözüm, bir decltype olacaktır. Mevcut Scala'da böyle bir tesis mevcut değil gibi görünüyor. bağlantılı sorularaScala neden bir declype içermiyor?
bir cevap verir: tipleri birinci sınıf vatandaş Ben bu anlamıyorum itiraf etmeliyim
değildirçünkü. Tiplerin C++ 'da birinci sınıf bir vatandaş olduğunu düşünmüyorum ama yine de
decltype
. Ben jenerik ya da benzeri bir şey tür parametreleri içindecltype
gibi bir şey sormuyorum (Ben jenerikler şablonları değil ve türleri içinde silinir anlıyorum). Yine de, bir tür bir ifadenin türün beklendiği bir yerde kullanılmasına izin veren bir operatör olduğunu düşünüyorum - kesinlikle derleyici bir ifade türünü değerlendirebilmelidir, aksi haldeval
tanımlaması için çıkarım girmesi mümkün olmaz.A
decltype
aşağıda gibi kullanılabilir - Kod, işe yarar bir şey bir şey yapmaya çalışmıyorum değil sadece sözdizimi ve temel kullanımını göstermek için:case class A(x:Int = 0) val a = new A(10) val b = new decltype(a) def f(c:decltype(a)) : decltype(a.x+a.x)
decltype
yokluğu, kasıtlı bir karar mı yoksa orada Scala'nın buna sahip olmamasının bazı nedenleri? Belki buna izin verecek derleme zamanı yansımasını kullanan bir çözüm var mı? kimin tip bazı değişkenx
biz açıkça ifade etmek istemiyoruz varsa, örneğinclass Decl[T] { type Type = T } object Decl { def apply[T](x: T) = new Decl[T] }
,:
val d = Decl(x) type TypeOfX = d.Type
Nasıl 'Burada devreye girer b' gelmez Benim ilk bıçak –
@ m-z b sadece bir örnek olarak burada. Bu özel durumda, val b = a ile aynı olacaktır, ancak aynı durumun olmayacağı benzer bir durumu kolayca hayal edebilir. Soruyu güncellemeye çalışacağım. – Suma
Soruyu anlamıyorum. Tip imzaları derleme zamanıdır, bu nedenle türünü statik olarak belirtebilmeniz gerekir. O zaman bu 'decltype' şeyi sana ne veriyor? Düzenli "val b: A = a" ve "f (c: A)" nın dezavantajı nedir: A'? –