[英]Initialization of val by destructuring in Kotlin
最初我想實現
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)
}
}
現在,科特林抱怨“必須初始化變量“卷””。
可以解決
init {
val(rolls, sides) = parseNotation(notation)
this.rolls = rolls
this.sides = sides
}
但它不太優雅。
所以我的問題是:只有在同一行上聲明val時,銷毀真的可能嗎?
該功能被稱為解構聲明 ,這是它是什么,立即指派給他們的新變量的聲明 。 不僅是用val
聲明的變量不能在以后的解構中使用,更早的聲明的變量也不能用。 例如,以下方法也不起作用:
var x = 0
var y = 0
(x, y) = Pair(1, 2)
值得一提的是,您正在尋找的功能(解構任務)是Kotlin將來可能使用的功能之一,在Kotlin 1.1活動中可投票的20張卡中。 雖然不再進行在線調查,但是您可以在這張圖片上看到該功能的描述,它的卡號為15。這很難辨認,所以這里是其中的內容:
Kotlin已經有銷毀聲明:
val (name, address) = findPerson(...)
一些用戶請求銷毀分配,即。 分配給多個先前聲明的var
:
var name = ...
...
var address = ...
...
(name, address) = findPerson(...)
您需要此功能嗎?
更新: 這是具有建議功能的正式文檔 , 這是調查結果 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.