2012-11-27 31 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; } 
}