我有以下代码,T1需要访问" a"这是Test的构造函数参数(扩展T1),但编译失败。如何解决?
trait T1 {
def x=a.length
}
class Test(a:String) extends T1{
}
答案 0 :(得分:7)
有几种可能性:
在您的特征中声明a
为抽象成员:
trait T1 { def a: String; def x = a.length }
class Test(val a: String) extends T1
创建一个声明a
的其他特征:
trait HasA { def a: String }
trait T1 extends HashA { def x = a.length; }
class Test(val a: String) extends T1
要求T1只能由具有a
:
trait HasA { def a: String }
trait T1 { self: HasA => def x = a.length }
class Test(val a: String) extends HasA with T1
答案 1 :(得分:3)
正如我之前在评论中所说,对我来说没有多大意义,无论如何,您可以使用自我类型引用特征并使用val
访问变量:
trait T1 {
self: Test => // self type reference.
def x= a.length
}
class Test(val a: String) extends T1{ }
通过这种方式,T1
只能从Test
或继承自它的类扩展。