我正在研究這個有一些函式呼叫的東西:
fun f1(){
// does some stuff
f2();
}
fun f2(){
// does some stuff
f1();
}
這是我的代碼外觀的簡化(它不用于無限回圈)。我的問題是它回傳 f2 未被參考的錯誤。我嘗試在網上搜索這個,但我從人們那里看到的唯一解決方案是詢問將函式移動到函式呼叫上方的位置,但這對我不起作用,因為我的其他函式也呼叫了那個函式并將 f2 移動到 f1 上方只會使從 f2 呼叫 f1 時 f1 未決議。
我還嘗試了 c 和 c 的函式宣告,但它導致錯誤,說我有不明確的函式定義,并且他們期望函式宣告中有函式體。
謝謝。
uj5u.com熱心網友回復:
我假設您試圖在同一個本地范圍內定義這兩個函式,并得到“未決議的參考”Kotlin 編譯器錯誤。
如果這是您的情況并且您無法以更好的方式重構您的流程,那么您可以將其中一個函式宣告為可為空的變數,然后再分配它。你的代碼然后會變成
var f2: (() -> Unit)? = null
fun f1() {
// does some stuff
// Option 1: wont get invoked if f2 is null when this line is executed
f2?.invoke()
// Option 2: will always try to get invoked, but if f2 is null when this line is executed,
// it will throw a NullPointerException
f2!!.invoke()
}
f2 = {
// does some stuff
f1()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/397198.html
標籤:科特林
上一篇:限制惰性列中的專案
下一篇:滑動時如何不重繪螢屏
