sách gpt4 ai đã đi

kotlin - 函数可以是默认参数值吗?

In lại 作者:行者123 更新时间:2023-12-02 01:00:10 30 4
mua khóa gpt4 Nike

Kotlin 文档声明“函数是一流的”。我正在尝试将函数用作函数扩展的默认值。但是编译器没有任何它:

fun  identity(x: T): T = x
fun Channel.dedupe(by: (T) -> P = ::identity): ReceiveChannel
{
...
}

错误是 Function invocation 'identity(...)' expected 这有点表明 Kotlin 根本不理解我想做什么。

有办法吗?

1 Câu trả lời

我不知道您为什么会收到此错误消息,但问题是类型不匹配:默认值必须对任何类型参数(受限)有意义。 IE。你需要一个 (T) -> P,但是 ::identity 可以给你 (T) -> T hoặc (P ) -> P.

证明:如果你改成

fun  identity(x: T): P = throw Exception()
fun List.dedupe(by: (T) -> P = ::identity): Unit {}

它编译。

答案(出现在下面的评论中):

nếu như P 更改为 Any?,我们应该能够使用 ::identity bởi vì (T) -> T Đúng (T) -> Any? 的子类型。不幸的是,它不起作用,但是使用 lambda 而不是函数引用可以:

fun  identity(x: T): T = x
fun Channel.dedupe(by: (T) -> Any? = { it }): ReceiveChannel
{
...
}

关于kotlin - 函数可以是默认参数值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51190819/

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com