scala - 使用for,foreach循环调用对象的方法

时间:2014-10-30 11:24:03

标签: scala

我有这段代码:

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))

感谢您提出我的错误建议吗?

2 个答案:

答案 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))