2010-01-23 31 views
15

ne "A <: B" özelliği ne anlama geliyor? Scala yılında

trait A <: B 

demek

yapar? Sadece

trait A extends B 

ile aynı mı?

Eklenme: Tür parametreleri için sözdizimini ve bu bağlamda <:'un ne anlama geldiğini biliyorum. Ancak, yukarıdaki örnekte bana A'un bildirilen özelliğin adı, bir tip parametresi değil.

+28

Sanırım B –

+1

FWIW'de gülümsüyor, 2.7.5 yüklememe izin vermiyor. –

+0

2,8 snapshot kullanıyorum (2.8.0.r20331-b20100101020206) –

cevap

17

aynı kapıya derlemeye görünüyor: <: ve extends aynıdır özellikle gibi tanımlanır anlaşılmaktadır dil spec bakarak.

Bu özellik "5.3.3 Özellikleri" bölümünde açıklanmamaktadır. Ancak Sözdizimi Özeti bundan bahseder.

TraitDef ::= id [TypeParamClause] TraitTemplateOpt 
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody] 
Extends ::= ‘extends’ | ‘<:’ 

GÜNCELLEME O r14632 yılında tanıtıldı. -Xexperimental derleyici seçeneği ile, önerilen bir dil özelliği olan Virtual Traits ile kullanmak için özelliği özet olarak işaretler. -Xexperimental olmadan, yalnızca özellikler için izin verilen 'uzantılar' eşanlamlısıdır.

+5

Kullandığınız spesifikasyonların bir bölümüne bağlı olarak değişir! Sözdizimi özeti eki, "Uzatmalar :: = 'uzatır" |' <: '" –

+0

Spesifikasyonda bir hata oluştu: https://lampsvn.epfl.ch/trac/scala/ticket/2953 – retronym

+0

Ayrıca bkz. Http : //lampsvn.epfl.ch/trac/scala/export/20327/scala/branches/devel-base-2.8.0/SIP/virtual-traits/sip-0000X.xhtml –

3

Evet, peki, biraz daha fazla bilgi için 'a bakın. language spec'dan, aşağıdaki tanımları görüyoruz:

Türler arasındaki iki ilişkiyi tanımlarız.

Tip eşdeğerlik T ≡ U T ve U, tüm bağlamlarda değiştirilebilir.

Uygunluk T <: U T Tipi U'ya uygundur.

Düzenleme:

ClassTemplateOpt ::= Extends ClassTemplate | [[Extends] TemplateBody] 
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody] 
Extends ::= ‘extends’ | ‘<:’ 
3

Scala Language Specification görüntüleniyor, aynı şey demek gibi görünüyor. Özellik açıklaması, yalnızca trait A extends B sözdiziminden bahseder. Ama Scala sözdizimi özeti özellik tanımları için birbirinin extends ve <: kullanır:

TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody] 
Extends ::= ‘extends’ | ‘<:’ 
11

<: sözdizimi (henüz uygulanmadı) sanal sınıflarında ileride kullanılmak üzere ayrılmıştır.