我有这段代码:
val br = new ListBuffer[Piece]
for(i <- 10 to 550 by 65) {
br += new Brick(Point(x = i, y = 20, w = widthB, h = heighB))
}
draw(g, color)
类的方法Piece
。现在,我想知道如何为draw
中的每个Piece
调用ListBuffer
方法。我正在尝试这种方式,但我不明白为什么它不起作用:
br.foreach(x => draw(g, orange))
感谢您提出我的错误建议吗?
答案 0 :(得分:4)
你忘了指定对象
br.foreach(x => x.draw(g, orange))
或
br.foreach(_.draw(g, orange))
答案 1 :(得分:1)
首先val
表示常量,br
无法重新分配
(br += X
等于br = br + X
)
其次,你最好拒绝可变的br状态,你真的不需要它。只需将Int的范围映射到Bricks列表中。
val br = (10 to 550 by 65) map (i => new Brick(Point(x = i, y = 20, w = widthB, h = heighB)))
第三,尝试在编写scala代码时拒绝OOP样式。用于数据表示的用例类和具有模式匹配的函数用于对数据的操作。
例如。班级Brick
不应该有方法draw
。更好
case class Brick(p: Point) extends Piece
def draw(piece: Piece, color: Color): Unit = piece match {
case Brick => //Some drawing rules
case _ => throw new IllegalArgumentException
}
然后foreach看起来像
br.foreach(item => draw(item, orange))