2012-11-27 33 views
7

下面的代碼:如何在課堂上多次使用特質?

trait T { 
    function foo() {} 
} 

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

產生以下錯誤:

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

是否有可能在一個類中兩次使用特質?

回答

6

「進口」的特質定義的方法的多個不同名稱的時間做到這一點:

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

這就是它!謝謝。 – Benjamin

+1

我可以看到問題來自哪裏,但使用此解決方案,您只需具有2個功能完全相同的功能,並使用完全相同的內部工作。爲什麼你想要2個功能完全一樣?如果「bar」函數使用與「baz」函數不同的類屬性(因此bar和baz實際上是相同的,但是兩次),那將很酷,但事實並非如此。 – Veda

+0

我認爲這主要是一個理論問題,因此非常簡單的答案。 –

0

是的,你可以使用一個特質兩次:

trait T { 
    function foo() {} 
} 

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