2017-04-11 75 views
1

考慮這種性狀「人」,這類「PersonImpl的」:Scala的設定器和吸氣劑

trait Person { 

    def name: String 
    def surname: String 
    def married: Boolean 
    def married_=(state: Boolean): Unit 

    override def toString(): String = name + " " + surname + " " + married 
} 

class PersonImpl(override val name: String, 
        override val surname: String, 
        override var married: Boolean) extends Person 

使用REPL(來自命令行階,只需打開終端,輸入階)創建該性狀和類。我有以下信息: -defined性狀人 -defined類PersonImpl的

然後,仍然在命令行,I型:

  • VAL號碼:人=新PersonImpl1( 「馬里奧」,「羅西」,假)
  • 的println(p)
  • p.married =真
  • prinln(p)

我可以清楚地看到我的人已經創建並且var字段已經從false更改爲true。好吧。一旦

trait Element { 

    def x: Int 
    def y: Int 
    def width: Int 
    def height: Int 

    def x_:(i:Int):Unit 
    def y_:(i:Int):Unit 

    override def toString(): String = x + " " + y + " " + width + " " + height 

} 

class GameElement(override var x: Int,override var y: Int,override val width: Int,override val height: Int) extends Element 

我鍵入類在命令行中我遇到了錯誤: 現在我重複同樣的過程正好與另一間教室和另一特點 「變量x,覆蓋無」

這怎麼可能?

+1

我在元素特質忘記 '=',這就是:特徵元素{ 高清X:詮釋 DEF Y:詮釋 DEF寬度的:int DEF高度的:int DEF X _ :(我的:int):單位 DEFý_ :(我的:int):單位 倍率DEF的toString():字符串= X + 「」 + Y +「 「+ width +」「+ height } –

+3

您拼寫錯了將元素與您的工作示例進行比較,您應該看到差異。 – puhlen

回答

1

這不是在Scala中這樣做的推薦方式 - 而是使用案例類。

但回答你q您應該def x_:(i:Int):Unit改爲變形點焊x_=(i:Int):Unit相同y的

+0

我會看看案例類,非常感謝Arnon –