2017-04-11 98 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 –