无法理解 () -> Call<WeatherData>
can't understand about () -> Call<WeatherData>
suspend fun safeApiCall(
apiCall: () -> Call<WeatherData>
): Resource<WeatherData> {
apiCall.enqueue() //error Unresolved reference: enqueue
}
在上面的代码中,() -> Call<WeatherData>
的含义是什么以及它与Call<WeatherData>
的区别
是的,@ADM 的 link.
的 Function types 部分解释了语法
基本上apiCall
的类型是一个没有参数的函数(()
,就像调用someFunction()
)并且它returns(->
) 类型为 Call<WeatherData>
的结果。这相当于:
fun apiCall(): Call<WeatherData>
除非您可以传入与该签名匹配的任何函数(相同的参数类型,相同的 return 类型)。这意味着你也可以传入 lambdas
safeApiCall({
doStuff()
doMoreStuff()
doThingThatReturnsAWeatherDataCall()
})
(当 lambda 是唯一可以将其移出括号的参数时,我只是想明确表示您将其作为参数传入)
如果您确实在某处声明了与签名匹配的函数,则可以改为传递对该函数的引用
fun coolWeatherFunction(): Call<WeatherData>
safeApiCall(this::coolWeatherFunction)
(您可以删除 this
,仅显示您如何在特定实例或 class 上引用函数)
有时可以更易读
"1 2 3 4 5".split(' ').map(String::toDouble).forEach(::println)
1.0
2.0
3.0
4.0
5.0
suspend fun safeApiCall(
apiCall: () -> Call<WeatherData>
): Resource<WeatherData> {
apiCall.enqueue() //error Unresolved reference: enqueue
}
在上面的代码中,() -> Call<WeatherData>
的含义是什么以及它与Call<WeatherData>
是的,@ADM 的 link.
的 Function types 部分解释了语法基本上apiCall
的类型是一个没有参数的函数(()
,就像调用someFunction()
)并且它returns(->
) 类型为 Call<WeatherData>
的结果。这相当于:
fun apiCall(): Call<WeatherData>
除非您可以传入与该签名匹配的任何函数(相同的参数类型,相同的 return 类型)。这意味着你也可以传入 lambdas
safeApiCall({
doStuff()
doMoreStuff()
doThingThatReturnsAWeatherDataCall()
})
(当 lambda 是唯一可以将其移出括号的参数时,我只是想明确表示您将其作为参数传入)
如果您确实在某处声明了与签名匹配的函数,则可以改为传递对该函数的引用
fun coolWeatherFunction(): Call<WeatherData>
safeApiCall(this::coolWeatherFunction)
(您可以删除 this
,仅显示您如何在特定实例或 class 上引用函数)
有时可以更易读
"1 2 3 4 5".split(' ').map(String::toDouble).forEach(::println)
1.0
2.0
3.0
4.0
5.0