2017-04-11 7 views
1

この特性「人とこのクラスを考慮すると「PersonImpl」:REPL使用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 

(コマンドラインからスカラを、単に端末とタイプスカラ座を開いて)私はトレイトとクラスを作成します。私は次のメッセージを持っている: は、コマンドラインから、まだ、 -definedクラスPersonImpl

次に形質人を-defined、私が入力します。

  • ヴァル・P:人( "マリオ" =新PersonImpl1、 "ロッシ」、false)を
  • の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_=(i:Int):UnitをDEFに変更されている必要があり、あなたの質問に答えるために、私は、ある要素の特性、に '=' を忘れてしまった:形質の要素{ デフX:のInt デフY:のInt DEF幅:のInt DEF高さ:のInt DEF X _ :(I:INT):単位 DEF Y _ :(I:INT):単位 オーバーライドデフのtoString():文字列= X + "" + Y + " "+幅+" "+高さ } –

+3

あなたのスペルが間違っています要素を実際の例と比較すると、違いが分かるはずです。 – puhlen

答えて

1

これはScalaでこれを行う推奨方法ではなく、代わりにケースクラスを使用します。

いますが、def x_:(i:Int):Unitをy

+0

ケースクラスを見て、たくさんのアルノンさんに感謝します –

関連する問題