2012-11-27 20 views
7

Aşağıdaki kodu:Sınıfta birkaç kez nasıl bir özellik kullanılır?

Trait method bar has not been applied, because there are collisions with other trait methods on C

mümkün mü bir sınıfta iki kez özelliği kullanmak için:

trait T { 
    function foo() {} 
} 

class C { 
    use T { T::foo as bar; } 
    use T { T::foo as baz; } 
} 

aşağıdaki hatayı üretir? Farklı adlarla

cevap

6

için "ithal" bir özellik için tanımlanan bir yöntemin birden çok kez bunu:

class C { 
    use T { 
    foo as bar; 
    foo as baz; 
    } 
} 
+0

olduğunu gösterir! Teşekkürler. – Benjamin

+1

Sorunun nereden geldiğini görebiliyorum, ancak bu çözüm ile tam olarak aynı işleve sahip, aynı dahili ile çalışan 2 fonksiyona sahipsiniz. Neden tam olarak aynı şeyi yapan 2 fonksiyon istersiniz? Eğer "bar" fonksiyonu "baz" fonksiyonundan farklı sınıf özniteliklerini kullanacaksa (yani çubuk ve baz aslında aynı, fakat iki kez), bu durum çok iyi olurdu, ama durum böyle değil mi? – Veda

+0

Bunun çoğunlukla teorik bir soru olduğunu düşünüyorum, dolayısıyla çok basit bir cevap. –

0

Evet, iki kez bir özelliği kullanabilirsiniz: o

trait T { 
    function foo() {} 
} 

class C { 
    use T { T::foo as bar; T::foo as baz; } 
} 
İlgili konular