Я вижу проблему с некоторым кодом Scala 2.7.7, над которым я работаю, этого не должно произойти, если его эквивалент был написан на Java. Скорее всего, код создает группу игроков в карты и распределяет их по столам.
class Player(val playerNumber : Int)
class Table (val tableNumber : Int) {
var players : List[Player] = List()
def registerPlayer(player : Player) {
println("Registering player " + player.playerNumber + " on table " + tableNumber)
players = player :: players
}
}
object PlayerRegistrar {
def assignPlayersToTables(playSamplesToExecute : Int, playersPerTable:Int) = {
val numTables = playSamplesToExecute / playersPerTable
val tables = (1 to numTables).map(new Table(_))
assert(tables.size == numTables)
(0 until playSamplesToExecute).foreach {playSample =>
val tableNumber : Int = playSample % numTables
tables(tableNumber).registerPlayer(new Player(playSample))
}
tables
}
}
PlayerRegistrar назначает количество игроков между столами. Во-первых, он определяет, сколько столов нужно разбить между игроками, и создает их список.
Затем во второй части кода выясняется, к какому столу должен быть назначен игрок, извлекает этот стол из списка и регистрирует нового игрока на этом столе.
Список игроков на столе является var и перезаписывается при каждом вызове registerPlayer (). Я проверил, что это работает правильно, с помощью простого теста TestNG:
@Test def testRegisterPlayer_multiplePlayers() {
val table = new Table(1)
(1 to 10).foreach { playerNumber =>
val player = new Player(playerNumber)
table.registerPlayer(player)
assert(table.players.contains(player))
assert(table.players.length == playerNumber)
}
}
Затем я проверяю присвоение таблицы:
@Test def testAssignPlayerToTables_1table() = {
val tables = PlayerRegistrar.assignPlayersToTables(10, 10)
assertEquals(tables.length, 1)
assertEquals(tables(0).players.length, 10)
}
Тест не пройден с "ожидаемым: <10>, но было: <0>". Я почесал голову, но не могу понять, почему registerPlayer () не изменяет таблицу в списке. Любая помощь будет оценена.