2012-03-22 110 views
4

class Foo(bar: String) { 
    import Foo.Bar 
    def this() = this(Bar) // this line fails, it seems I can only do 
         // def this() = this(Foo.Bar) 
} 

object Foo { 
    val Bar = "Hello Bar" 
} 

基本上,我怎么使用Barimport Foo.Bar后,我真的要叫Foo.Bar每一次?斯卡拉最终静态变量

回答

13

二级构造有外范围,以防止你做一些愚蠢的是这样的:

class Silly(foo: String) { 
    val bar = 123 
    def this() = this(bar.toString) 
} 

在您尝试将参数传递给构造......在构造函数创建后。

不幸的是,这意味着import Foo.Bar不在该行的范围内。您必须使用完整路径Foo.Bar

对于类中除之外的所有其他构造函数Foo.Bar将在Bar的范围内。

5

如果您只是在类定义之外导入会怎么样?

import Foo.Bar 

class Foo(bar: String) { 
    def this() = this(Bar) 
} 

object Foo { 
    val Bar = "Hello Bar" 
}