gpt4 book ai didi

kotlin - Kotlin 中 lambda 函数参数的默认值

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

我在构造函数中有这样一个带有 lambda 的枚举

enum class EventType(
val getInfoBlocks: (Book, AuditEntity?) -> List<InfoBlock>? = { _, _ -> emptyList() }
) {...}
现在我像这样使用这个 lambda 函数:
data = it.getInfoBlocks.invoke(deal, null)
我可以不用null吗?有没有办法为空 lambda 函数参数设置默认值?

最佳答案

TL;DR :函数类型不能有与之关联的默认参数值。这是只有命名(非匿名)函数可以做的事情。
但是 ,可能有更好的解决方案来解决您的问题。

不,匿名函数(即 lambda 表达式和 fun 块)不允许为其参数指定默认值。
但是,您的提议甚至比这更复杂:您似乎希望默认值与函数的类型相关联,因此无论将哪个函数分配给此属性,它都会保持不变。
因为这个默认值将取决于函数被分配给的变量的类型,为了实现这一点,类型系统需要一种方法来将默认参数值存储在函数的类型信息中(即类似 (Book, AuditEntity? = null) -> List<InfoBlock>? 的东西) ,而且没有办法做到这一点。

然而,鉴于这是一个枚举,没有必要将匿名函数存储为属性;只需声明一个虚函数并根据需要覆盖它:

enum class EventType {

// Type1 has the default implementation
Type1,

// Type2 has its own implementation
Type2 {
override fun getInfoBlocks(book: Book, entity: AuditEntity?): List<InfoBlock>? {
// Do something else
return foo()
}
};

// Default implementation
open fun getInfoBlocks(book: Book, entity: AuditEntity? = null): List<InfoBlock>? {
return emptyList()
}

}
(注意分号是 需要 来终止常量列表。)

这类似于(但不相同)为什么不可能在匿名函数本身( see also this question )中指定默认参数,即:
{ a: Any, b: Any? = null -> foo() }
由于这甚至不可能,因此没有办法为整个函数系列指定默认参数是有道理的。

关于kotlin - Kotlin 中 lambda 函数参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62532478/

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