无法理解 () -> 呼叫<WeatherData>


suspend fun  safeApiCall(
apiCall: () -> Call<WeatherData>
): Resource<WeatherData> { 
apiCall.enqueue()          //error Unresolved reference: enqueue
}

在上面的代码中,() -> Call<WeatherData>的含义是什么,它与Call<WeatherData>有何不同

是的,语法在@ADM链接的函数类型部分进行了解释。

基本上,apiCall的类型是一个没有参数的函数((),类似于调用someFunction()(,它返回(->(一个类型为Call<WeatherData>的结果。它相当于:

fun apiCall(): Call<WeatherData>

除非您可以传入任何与该签名匹配的函数(相同的参数类型,相同的返回类型(。这意味着你也可以通过lambdas

safeApiCall({ 
doStuff()
doMoreStuff()
doThingThatReturnsAWeatherDataCall()
})

(当lambda是唯一可以从括号中移出的参数时,我只想明确一点,你是把它作为参数传入的(

如果你在某个地方声明了一个与签名匹配的函数,你可以在中传递对它的引用

fun coolWeatherFunction(): Call<WeatherData>
safeApiCall(this::coolWeatherFunction)

(您可以删除this,只显示如何引用特定实例或类上的函数(

有时更可读

"1 2 3 4 5".split(' ').map(String::toDouble).forEach(::println)
1.0
2.0
3.0
4.0
5.0

最新更新