Since Kotlin supports many concepts from functional programming, I was wondering if there is a way to do partial application of a function in Kotlin as well?

部分应用可能有用的一个这样的示例是:

// In one class
fun doSomething(cb: (a, b) -> Unit) {
    <some logic here to compute someField>
    doSomethingElse(cb.applyPartially(someField))
}

// In another class
fun doSomethingElse(cb: (b) -> Unit) {
    <some logic here to compute someOtherField>
    cb(someOtherField)
}

推荐答案

开箱即用,没有.但使用助手函数并不难:

    fun add(a: Int, b:Int): Int {
        return a + b
    }

    fun <A, B, C> partial2(f: (A, B) -> C, a: A): (B) -> C {
        return { b: B -> f(a, b)}
    }

    val add1 = partial2(::add, 1)

    val result = add1(2) //3

因此artial2接受一个包含2个参数和第一个参数的函数,并应用它来获得一个包含1个参数的函数.您将不得不为您需要的所有慈善机构编写这样的帮助器.

或者,您可以使用扩展方法:

fun <A,B,C> Function2<A,B,C>.partial(a: A): (B) -> C {
    return {b -> invoke(a, b)}
}

val abc: (Int) -> Int = (::add).partial(1)

Kotlin相关问答推荐

Lambda和普通Kotlin函数有什么区别?

将基于注册的服务转换为流

在KMM合成多平台中创建特定于平台的视图

我如何测试一个可组合组件没有显示,但如果它不存在也接受?

使用另一个对象的列表创建对象

&x是T&q;和&q;(x为?T)!=空(&Q;)?

kotlin - 挂起简单方法调用链时可能存在冗余分支

如何在数据类中删除空格 (String)?

为什么在jacksonObjectMapper上将DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES设置为false无效?

使用调度程序运行异步 Kotlin 代码

根据字符串值动态过滤数组列表 - kotlin

kotlin,如何从函数返回类类型

如何解决此错误请Kotlin:[Internal Error] java.lang.ExceptionInInitializerError

在 Kotlin 中取最后 n 个元素

如何从kotlin中的类实例化对象

应用程序在使用 Google Play 服务时遇到问题

Mocked suspend函数在Mockito中返回null

可以在函数参数中使用解构吗?

为什么在 Kotlin 中return可以返回一个return?

RxJava2 UndeliverableException 在获取数据时发生方向变化