У меня есть следующий фрагмент кода:
val tiles = for {
x <- 0 to bitmap.length by tileSize
y <- 0 to bitmap(0).length by tileSize
} yield new Tile[Number](x, y, tileSize, tileSize,
data = for {tx <- x to x + tileSize - 1;
ty <- y to y + tileSize - 1
} yield (bitmap(tx)(ty)))
Это может показаться сложным, но идея состоит в том, чтобы создать Tile
объекты для каждой позиции XY в 3-мерном bitmap
объекте. «Вложенный» yield
, который задается как параметр data
в конструкторе Tile
, представляет собой IndexedSeq[Number]
, который должен быть преобразован в Array[Number]
для соответствия типу параметра data
. Проблема в том, что метод toArray
не существует для конечного yield
объекта ed:
val tiles = for {
x <- 0 to bitmap.length by tileSize
y <- 0 to bitmap(0).length by tileSize
} yield new Tile[Number](x, y, tileSize, tileSize,
data = for {tx <- x to x + tileSize - 1;
ty <- y to y + tileSize - 1
} yield (bitmap(tx)(ty).toArray))
вызывает ошибку Cannot resolve symbol toArray
, хотя yield (bitmap(tx)(ty).toArray))
отображается как IndexedSeq[java.lang.Number]
в IntelliJIDEA и теоретически должен содержать определение toArray
метода.
Что происходит за последние yield
? Как я могу преобразовать полученную коллекцию в Array
? Я знаю, этот код может и должен быть переписан более простым и читаемым образом, но теперь я хочу знать, что происходит за кулисами.