Çok arandım, ama bir şey bulamadım, Scala içinde bu type declaration
türünün anlamı nedir? Senin durumunda Null
yılındaScala'daki>: Null <: ifadesinin anlamı nedir?
type Ident >: Null <: AnyRef
Çok arandım, ama bir şey bulamadım, Scala içinde bu type declaration
türünün anlamı nedir? Senin durumunda Null
yılındaScala'daki>: Null <: ifadesinin anlamı nedir?
type Ident >: Null <: AnyRef
Anahtar Kelime type
type alias bildirimi için, val
ve def
gibi, değer ve yöntem bildirimi içindir. Bu durumda, kısıtlamaları olan soyut bir tür takma adıdır, yani yerel kapsamdaki trait
veya class
- türünde bir takma adın soyut üyesi olamaz ve kısıtlamaları olamaz.
Tip Ident
, AnyRef
ve Null
türünün bir alt türüdür.
AnyRef
AnyRef
bütün referans türlerinin bir atası, bu kadar Int
, Long
, Char
ve dışındaki tüm türleri (Java ilkel) 'dir.
Boş
Null
tüm "null" türlerinin alt tipidir. Aslında, tüm referans türlerinin bir alt tipi. Tüm AnyRef
yana
>: Null
sadece ek kısıtlama
Ident
Nothing
olmadığıdır null bulunmaktadır.
Scala’s type hierarchy bakınız:
Ident
ve AnyRef
onun süper tip olduğu bir tipidir. Gelen her tip bu sınırları sık görülen alt Nothing
, ancak (.. vb Int, Long dahil) Hiçbir şey her şeyin bir alt tipi olduğu zaman bütün nesnenin bir alt tipi olan ile o Null
olmak nasıl
şeyler belirtmek olmadan Null ve Hiçbir şey, Tip Sisteminde, temel olarak (Contra/Co) varyans türünde kullanılır. Örnek:
sealed trait Container[+A >: Null <: AnyRef]
case class Full[A >: Null <: AnyRef](value: A) extends Container[A]
case object Empty extends Container[Null]
mükemmel Bu derleyici
val c: Container[String] = Full("String")
val e: Container[String] = Empty
Ama bizim alt sınır boş ve üst AnyRef çünkü bu, başarısız:
val ff: Container[Int] = Full(10)
val f: Container[Int] = Empty
Biz bu beacuse burada Int
koyamazsınız tür, çakışmaları ihlal eder
@ Sénia cevabı Ekleme: Bu bir tip beyan değil, bu
gibi bağlamında bulunan bir soyut tip elemanı beyannamesi, olduğuve Foo
'un herhangi bir somut uygulamasınınolmak üzere bir tür tanımlaması gerektiği anlamına gelirve bu tür @ senia'nın cevabında açıklanan kısıtlamaları yerine getirmelidir.
Evet, bu tür bir tanımlama özellikte idi – Pooya
Hızlı bir takip sorusu daha sonra ('meraklı olduğum için), alt sınır burada gereksiz değil mi? 'Null' tüm referans türlerinin alt tipi olduğundan ve tip zaten * herhangi bir referans türü * olarak tanımlanan üst sınırı var mı? –
Teşekkürler, hiyerarşiyi biliyorum, ama sorum buydu bu komut – Pooya
@ PatrykĆwiek: Sanırım öyle. Ancak "Boş" tipi, değerin "boş" olabileceği konusunda açık bir uyarı olarak belirtilebilir. – senia