Inicialización de val por desestructuración en Kotlin

Inicialmente quería lograr

class NotationDiceRoll(notation: String) {
    val rolls: Int
    val sides: Int

    init {
        parseNotation(notation)
    }

    private fun parseNotation(notation: String) {
        rolls = 1
        sides = 4
    }
}

Pero Kotlin se queja de que "Val no puede ser reasignado".

Parece que el único lugar donde se pueden asignar los vals es el bloque init. Bien entonces, es más obvio después de todo. Entonces lo cambié a

class NotationDiceRoll(notation: String) {
    val rolls: Int
    val sides: Int

    init {
        (rolls, sides) = parseNotation(notation)
    }

    private fun parseNotation(notation: String): Pair<Int, Int> {
        return Pair(1, 4)
    }
}

Ahora Kotlin se queja de que "los 'rollos' variables deben ser inicializados".

Puede ser resuelto por

init {
    val(rolls, sides) = parseNotation(notation)

    this.rolls = rolls
    this.sides = sides
}

Pero es menos elegante.

Entonces mi pregunta es: ¿la desestructuración es realmente posible solo con los valles declarados en la misma línea?

Respuestas a la pregunta(1)

Su respuesta a la pregunta