"возврат здесь не разрешен" при возврате внутри kotlin лямбда - PullRequest
2 голосов
/ 29 апреля 2019

Я использую лямбду для обработки обратных вызовов от асинхронного вызова. Я хотел бы определить обратный вызов вне вызывающего метода, чтобы избежать громоздкого метода, но я не могу использовать ранние возвраты в лямбда-выражении, что делает код излишне трудным для чтения.

Я пытался определить лямбду как переменную, но возвраты внутри лямбды не осуществимы.

Я пытался определить лямбду внутри функции и возвращать ее, но и там возврата не было.

Например:

 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
   }
 }

Я хотел бы выполнить ранний возврат вместо использования другого случая, чтобы избежать ненужного отступа, но я не могу найти способ использовать возврат внутри лямбды.

1 Ответ

1 голос
/ 29 апреля 2019

Вы можете достичь этого, пометив лямбду. Например, если вы пометите его как 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
}
...