gpt4 book ai didi

lambda - 故障保护与Fallback() : why kotlin compiler fails to infer lambda type?

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

我的 kotlin 代码中有以下内容:

return Failsafe.with<Boolean>(retryPolicy)
// Here I want fall back to false
.withFallback { -> false} // Does not work
.get { ->
publish(event)
true
}

Kotlin 编译器提示说:

Error:(89, 14) Kotlin: Overload resolution ambiguity:

public final fun withFallback(p0: (() -> Boolean!)!): SyncFailsafe! defined in net.jodah.failsafe.SyncFailsafe

public final fun withFallback(p0: (() -> Unit)!): SyncFailsafe! defined in net.jodah.failsafe.SyncFailsafe



但这种方式是有效的:
val fallback: () -> Boolean = { false }

return Failsafe.with<Boolean>(retryPolicy)
// Here I want fall back to false
.withFallback(fallback) // Works
.get { ->
publish(event)
true
}

有人可以解释一下为什么它不适用于括号外的 lambda 文字吗?以及如何使其与 lambda inline 一起使用?

最佳答案

如果你写

val fallback: () -> Unit = { -> false }

你会看到它也编译了(它只是丢弃了结果)。所以 { -> false}可用于两种类型 () -> Boolean() -> Unit并且编译器不知道你想要哪个。

因此,要使用 lambda,请在此处指定所需的类型:
.withFallback({ -> false} as () -> Boolean)

或创建一个没有重载的扩展函数,例如:
fun <T, F> FailsafeConfig<T, F>.withFallbackT(fallback: () -> T) = withFallback(fallback)

return Failsafe.with<Boolean>(retryPolicy)
.withFallbackT { -> false}...

关于lambda - 故障保护与Fallback() : why kotlin compiler fails to infer lambda type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53543938/

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