我想创建一个GridBagPanel.Constraints
列表。
我在scala编程书中看到它有一个很酷的for-yield
构造,但我可能还没有理解它的正常工作方式,因为我的代码没有编译。这是:
val d = for {
i <- 0 until 4
j <- 0 until 4
} yield {
c = new Constraints
c.gridx = j
c.gridy = i
}
我想生成一个List[Constraints]
,并为每个约束设置不同的x,y值以便稍后,当我稍后添加组件时,它们将会在网格中。
答案 0 :(得分:6)
您只需要在c
块的末尾返回yield
即可获得Constraints
的集合。要让它返回List
,请使用List
代替Range
。像这样:
val d = for {
i <- List.range(0, 4)
j <- List.range(0, 4)
} yield {
c = new Constraints
c.gridx = j
c.gridy = i
c
}
事实上,原始代码在Scala 2.7中没有达到您的预期,因为,范围(如Range
中所示)是非严格的。您可以在Stack Overflow或Google上查找,但缺点是每次在d
上查找元素时,都会创建一个新的Constraint
。 Scala 2.8的此行为已更改。
答案 1 :(得分:1)
试试这个:
def conCreate = {
val c = new Constraints
c.gridx = j
c.gridy = i
c
}
val d = for( i <- 0 until 4;
j <- 0 until 4 ) yield conCreate(i,j)
我已通过调用函数替换了您的调用。我已经用Iterator.range(0,4)替换了,但我已经把它还给了直到。两者都是有效的代码,实际上意思相同。