2012-03-22 114 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" 
}