我可以在不同的文件中声明内部类而不是外部类吗?

时间:2014-04-15 07:41:28

标签: scala syntax

我正在寻找一种以可访问外部作用域(包装类)的方式声明内部类的方法。这两个类都非常庞大,所以我想在不同的文件中声明它们。例如,我想做类似的事情:

A.scala:

class A(_secret:Int){
    val secret = _secret
    var clazz:Class = null
}

B.scala:

A.clazz = class B{
    def getSecret(){
        A.secret
    }
}

整个目的是避免将this作为构造函数参数传递,i。即var clazz = new B(this)

1 个答案:

答案 0 :(得分:0)

可能本身不是答案,但通常反过来也是如此:

A.scala:

class A{
    type clazz = B
}

B.scala:

class B{

}

编辑:

trait Foo { self: Bar => 
    def fooSecret = "foo secret"

    def foo() {
        println("I'm foo, but also know bar's secrets: " + self.barSecret)
    }
}

trait Bar { self: Foo =>
    def barSecret = "bar secret"

    def bar() {
        println("I'm bar, but also know foo's secrets: " + self.fooSecret)
    }
}

class Impl extends Foo with Bar
val x = new Impl
x.foo()
x.bar()

导致

I'm foo, but also know bar's secrets: bar secret
I'm bar, but also know foo's secrets: foo secret

请注意,我使用了def和不同的方法名称(在混入时很重要,因为涉及到继承)