2015-06-11 63 views
0

考慮一個代碼段重用變量在派生類中:斯卡拉

trait MyTrait{ 
val x: Int = 0 
} 
case class MyClass(y: Int = 1, z: Int = 2) extends MyTrait 
//script starts now 
val myClass = MyClass(3,4) 
myClass.copy(x, 5) 

爲什麼這個不行?它說未定義的變量x。我知道它可以寫成像

case class MyClass(override val x:Int = 0, y: Int = 1, z: Int = 2) extends MyTrait 

但我想知道爲什麼我不能只使用默認值?

編輯

在這種情況下是不可能設置MyTrait的x變量?

+0

請註明原因downvoting問題,這樣我可能會在未來在其改善。 – Sohaib

+0

'myClass.copy(x,5)'你期待這樣做?複製並將x設置爲5?現在,如果範圍內有一個x,它會將y設置爲x的值,z設置爲5. –

+0

@Paul是的,這是意圖。我只是學習Scala。那麼由於這種設計,我們現在無法真正設置x? – Sohaib

回答

1

沒有x,只有一個成員的特點MyTraitx(和你的類MyClass的)。

所以這可能會做你想要什麼:

myClass.copy(myClass.x, 5) 
+0

瞭解。謝謝! – Sohaib

3

x當你做myClass.copy(x, 5)時不在範圍內。您已在特徵中定義了x,但您在中輸入的x與特徵內部的x不一樣。因此,編譯器抱怨在myClass.copy(x,5)中找不到值x

+0

明白了。實際上,x是圍繞我刪除的一堆其他函數編寫的。謝謝! – Sohaib