【发布时间】:2017-06-13 08:18:09
【问题描述】:
最初我想实现
class NotationDiceRoll(notation: String) {
val rolls: Int
val sides: Int
init {
parseNotation(notation)
}
private fun parseNotation(notation: String) {
rolls = 1
sides = 4
}
}
但 Kotlin 抱怨“无法重新分配 Val”。
似乎唯一可以分配 val 的地方是 init 块。好吧,毕竟它更明显。所以我把它改成
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)
}
}
现在 Kotlin 抱怨“必须初始化变量 'rolls'”。
可以解决
init {
val(rolls, sides) = parseNotation(notation)
this.rolls = rolls
this.sides = sides
}
但它不那么优雅。
所以我的问题是:只有在同一行声明 val 时,解构真的可能吗?
【问题讨论】:
标签: initialization kotlin destructuring