2013-10-29 85 views
2

考慮到這一點的typedef的一個實例:Scala的語法如何創建嵌套情況下類

case class Outer(someVal: Int) { 
    case class Inner(someOtherVal: Int) 
} 

我怎樣構建Inner類型的對象(即我怎樣寫有效階語法)?

我希望Inner的作用域爲Outer,以避免在同一個包中與Outer的不同實例發生名稱衝突。

+2

您確定要內成爲*例如*類,而不是* class * class(在Java中你寫*靜態*爲後者)?如果沒有,你必須在同伴中定義Inner,否則'val x = Outer(1); x.Inner(2)'將起作用 –

回答

8

內部在外部實例的範圍內。 所以,你可以寫這樣的事情:

val res = new Outer(4) 
val res2 = new res.Inner(2) 

但是,我不認爲這是你想要的。 爲避免名稱衝突,您可以使用包,它是爲此而設計的。

編輯:

您還可以在外面的同伴對象定義內,像OM-NOM-NOM說:

case class Outer(someVal : Int) 
object Outer { 
    case class Inner(otherVal : Int) 
} 

val res = Outer(5) 
val in = Outer.Inner(6) 
+3

請參閱[* type projection *](http://stackoverflow.com/questions/6676048/why-does-one-select-scala-type-members-with-a-hash -instead對的一 - 點) –

相關問題