将上下文绑定到作用域函数以在Kotlin中创建函数引用?

时间:2019-10-24 15:47:29

标签: kotlin

如果我具有以下两个函数,我可以将alpha绑定到特定的字符串,然后将其传递给另一个高阶函数,如图所示,但我想知道是否有更简洁的方法来执行此操作?

fun foo(alpha: String.(Int, Int) -> Unit) {
    bar { x, y -> "george".alpha(x, y) }
}

fun bar(beta: (Int, Int) -> Unit) {
    // ...
}

例如我想知道是否存在将"george"绑定到alpha的语法,所以我可以做这样的事情,而不必创建新的lambda(如上所述)来简单地转发其参数:

bar("george".bind(alpha))
如果我的术语完全错误,请

道歉。当我在问题标题中引用 scope函数时是在谈论alpha,但也许这个术语是为apply等保留的?

1 个答案:

答案 0 :(得分:0)

可能不完全是您想要的,但是如果您在bar中多次调用foo,则可以使用内部函数使其更加简洁:

fun foo(alpha: String.(Int, Int) -> Unit) {
    fun String.alpha(x: Int, y: Int) = alpha(x, y)
    bar("george"::alpha)
    bar("georgina"::alpha)
}