我有一张看起来像这样的 map :
val fields: Map[(Int, Int), Field]
我想过做这样的事情:
val fields: Map[(Int, Int), Field] =
Map(
for(a <- 0 to 10)
{
(0, a) -> new Field(this, 0, a)
}
)
而不是像这样的长复制/粘贴列表:
(0, 0) -> new Field(this, 0, 0),
(1, 0) -> new Field(this, 1, 0),
(2, 0) -> new Field(this, 2, 0),
(3, 0) -> new Field(this, 3, 0),
(4, 0) -> new Field(this, 4, 0),
(5, 0) -> new Field(this, 5, 0),
(6, 0) -> new Field(this, 6, 0),
(7, 0) -> new Field(this, 7, 0),
(8, 0) -> new Field(this, 8, 0),
(0, 1) -> new Field(this, 0, 1), ...
但我明白了
Type mismatch, expected: (NotInferedA, NotInferedB), actual: Unit
这是为什么?我该如何克服这个问题?
最佳答案
问题是您的理解不会返回任何内容。 这里有两种不同的解决方案来解决您的问题。我个人更喜欢第二个。
case class Field(map: Map[(Int, Int), Field], a: Int, b: Int)
val fields: Map[(Int, Int), Field] =
Map(
(for(a <- 0 to 10) yield (0, a) -> new Field(fields, 0, a)): _*
)
val fields: Map[(Int, Int), Field] =
(0 to 10).map(a => (0, a) -> new Field(fields, 0, a)).toMap
编辑:
case class Field(board: Board, x: Int, y: Int)
class Board {
val fields: Map[(Int, Int), Field] =
(0 to 10).map(a => (0, a) -> new Field(this, 0, a)).toMap
}
class Board {
val fields: Map[(Int, Int), Field] =
(for(a <- 0 to 10; b <- 0 to 10)
yield (a, b) -> new Field(this, a, b)).toMap
}
关于scala - 创建时用 for 循环填充不可变映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30561653/