2016-10-10 28 views
0

我在斯卡拉一類有兩個參數的構造函數的一部分:斯卡拉:調用的方法作爲構造

class SomeClass (x:Int, y:Int) { 
} 

我需要擴大的構造,所以當這個類的一個對象被初始化,一些方法被調用,它使用在由Scala的默認主構造中定義的的x值,然後輸出一個值z

def defineInputs(): Int = { 
    val z = x + 1 
    z 
} 

我想要的z值可訪問公開在所有方法類,就像xy一樣。

你能幫我解決嗎?

+0

您可以通過「加載方法」是什麼意思? – pedrofurla

+0

也許'呼叫'是一個更好的術語。改性。 – EdgeRover

回答

3

您可以簡單地定義一個val類裏面,像這樣:

scala> :pa 
// Entering paste mode (ctrl-D to finish) 

class SomeClass(x: Int, y: Int) { 
    val z = x + 1 
} 

new SomeClass(0, 0).z 

// Exiting paste mode, now interpreting. 

defined class SomeClass 
res0: Int = 1 

你也可以使用一個案例類:

scala> case class SomeClass(x: Int, y: Int) { 
    | val z = x + 1 
    | } 
defined class SomeClass 

scala> SomeClass(0, 0).z 
res0: Int = 1 
+0

謝謝。它可以在類中完成,因爲[http://docs.scala-lang.org/tutorials/tour/case-classes.html]提到「只有在使用模式匹配來分解時才定義案例類纔有意義數據結構」。 – EdgeRover

+0

我不同意這種說法,但是,它可以完成!查看我更新的答案以獲取更多信息。在我的例子中,我使用'case class'的原因是Scala編譯器會自動生成'apply'方法(以及'unapply'方法),從而在構造新實例時不需要使用'new'關鍵字的類。 – Eric