在Kotlin Lambda内部返回时,“此处不允许返回”

时间:2019-04-29 15:50:08

标签: android kotlin functional-programming

我使用lambda处理来自异步调用的回调。我想在调用方法之外定义回调,以避免使用笨重的方法,但是我似乎无法在lambda中使用早期返回,这使代码不必要地难以阅读。

我尝试将lambda定义为变量,但是在lambda内部返回不可行。

我尝试在函数内定义lambda并返回,但是返回在那也不可行。

例如:

 private fun onDataUpdated(): (Resource<List<Int>>) -> Unit =  {
   if (it.data.isNullOrEmpty()) {          
     // Handle no data callback and return early.
     return@onDataUpdated // This is not allowed   
    }

   // Handle the data update
   }
 }

我也尝试过:

 private val onDataUpdated: (Resource<List<Int>>) -> Unit =  {
   if (it.data.isNullOrEmpty()) {          
     // Handle no data callback and return early.
     return // This is not allowed   
    }

   // Handle the data update
   }
 }

我想执行早期返回,而不是使用else情况,以避免不必要的缩进,但是我似乎找不到在lambda中使用返回的方法。

2 个答案:

答案 0 :(得分:1)

您可以通过标记lambda来实现。例如,如果您用dataUpdated标记:

private val onDataUpdated: (Resource<List<Int>>) -> Unit = dataUpdated@ {
    if (it.data.isNullOrEmpty()) {
        // Handle no data callback and return early.
        return@dataUpdated
    }

    // Handle the data update
}

答案 1 :(得分:0)

通常,您只需将“返回”放在lambda的底部。这是使用Dispatchers.IO的示例:

var res = async(Dispatchers.IO){
   var text : String? = null
   if(channel==null) {
      text = networkRequest(url)
   }
   text
}.await()