代码之家  ›  专栏  ›  技术社区  ›  Martin Algesten

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

  •  3
  • Martin Algesten  · 技术社区  · 7 年前

    Kotlin文档声明“功能是一流的”。我试图使用一个函数作为函数扩展的默认值。但是编译器没有任何功能:

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

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

    有办法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Alexey Romanov    7 年前

    (T) -> P ::identity (T) -> T (P) -> P

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

    P Any? (T) -> Any?

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