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