gpt4 book ai didi

kotlin - 在添加 “run”之前,将忽略Lambda。

转载 作者:行者123 更新时间:2023-12-02 13:14:17 25 4
gpt4 key购买 nike

我有一个rx链,可通过Retrofit调用API。我使用标准的rx subscribe({...})方法订阅了我的API服务,并将lambda传递给它。不幸的是,当我的调用最终完成时,我添加到lambda内部执行的所有代码都将被完全忽略。 AndroidStudio建议了一个修复程序,该修复程序基本上向我的lamda添加了一个内联函数run,并且...神奇地起作用。我不知道发生了什么事。为什么没有run无法使用? run是做什么的?

代码如下:

valuesServiceApi.getValues()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ data ->
run { //<- What's this?
val cs = data.creditReportInfo.score
view.setCreditScore(cs)
Logger.getLogger("success:").info("credit score $cs")
}

})

最佳答案

{ expressions }{ -> expressions }的缩写,它是带有零参数的函数文字。

因此,

{ data ->
{
val cs = data.creditReportInfo.score
view.setCreditScore(cs)
Logger.getLogger("success:").info("credit score $cs")
}
}

是相同的
{ data ->
{ ->
val cs = data.creditReportInfo.score
view.setCreditScore(cs)
Logger.getLogger("success:").info("credit score $cs")
}
}

它创建一个lambda表达式,对此不执行任何操作。

你想做的是
{ data ->
{ ->
val cs = data.creditReportInfo.score
view.setCreditScore(cs)
Logger.getLogger("success:").info("credit score $cs")
}()
}

但这和
{ data ->
val cs = data.creditReportInfo.score
view.setCreditScore(cs)
Logger.getLogger("success:").info("credit score $cs")
}

加上附加函数创建开销。
run { ... }等于 { ... }() 减去额外的临时函数创建开销。所以上面的和
{ data ->
run { ->
val cs = data.creditReportInfo.score
view.setCreditScore(cs)
Logger.getLogger("success:").info("credit score $cs")
}
}

关于kotlin - 在添加 “run”之前,将忽略Lambda。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com