Kotlin 在扩展函数中替换lamda

Kotlin 在扩展函数中替换lamda,kotlin,Kotlin,这是一个扩展函数: fun <T, R> Collection<T>.fold(initial: R, combine: (acc: R, nextElement: T) -> R): R { var accumulator: R = initial for (element: T in this) { accumulator = combine(accumulator, element) } return accu

这是一个扩展函数:

fun <T, R> Collection<T>.fold(initial: R,  combine: (acc: R, nextElement: T) -> R): R {
    var accumulator: R = initial
    for (element: T in this) {
        accumulator = combine(accumulator, element)
    }
    return accumulator
}
var collection = listOf<String>()
collection.fold(3, ::someFun)

fun <T, R> someFun(acc: R, nextElement: T): R {
    var accumulator: R = acc
    // ...
    return accumulator
}
fun Collection.fold(首字母:R,combine:(acc:R,nextElement:T)->R:R{
var累加器:R=初始值
for(本文件中的元素:T){
蓄能器=联合收割机(蓄能器,元件)
}
回流蓄能器
}
是否可以用单独的函数替换作为函数的第二个参数。例如,类似于以下内容的内容:

fun <T, R> Collection<T>.fold(initial: R, someFun)

fun someFun (acc: R, nextElement: T) -> R): R {
        var accumulator: R = initial
        for (element: T in this) {
            accumulator = combine(accumulator, element)
        }
        return accumulator
}
fun Collection.fold(首字母:R,someFun)
有趣的事有趣的事(acc:R,NEXTLEMENT:T)->R:R{
var累加器:R=初始值
for(本文件中的元素:T){
蓄能器=联合收割机(蓄能器,元件)
}
回流蓄能器
}

您可以使用两个冒号来传递对函数的引用:

fun <T, R> Collection<T>.fold(initial: R,  combine: (acc: R, nextElement: T) -> R): R {
    var accumulator: R = initial
    for (element: T in this) {
        accumulator = combine(accumulator, element)
    }
    return accumulator
}
var collection = listOf<String>()
collection.fold(3, ::someFun)

fun <T, R> someFun(acc: R, nextElement: T): R {
    var accumulator: R = acc
    // ...
    return accumulator
}
var collection=listOf()
收藏。折叠(3,::一些乐趣)
有趣的事有趣的事(acc:R,nextElement:T):R{
var累加器:R=acc
// ...
回流蓄能器
}

您可以使用两个冒号来传递对函数的引用:

fun <T, R> Collection<T>.fold(initial: R,  combine: (acc: R, nextElement: T) -> R): R {
    var accumulator: R = initial
    for (element: T in this) {
        accumulator = combine(accumulator, element)
    }
    return accumulator
}
var collection = listOf<String>()
collection.fold(3, ::someFun)

fun <T, R> someFun(acc: R, nextElement: T): R {
    var accumulator: R = acc
    // ...
    return accumulator
}
var collection=listOf()
收藏。折叠(3,::一些乐趣)
有趣的事有趣的事(acc:R,nextElement:T):R{
var累加器:R=acc
// ...
回流蓄能器
}

我不确定为什么需要以这种方式提取函数。所需的有问题的代码没有编译,为了提出一个可行的替代方案,需要知道您的实际意图

例如,如果您不想在参数类型中拼写长函数签名,可能是因为您有许多这样的函数使用该类型的函数参数,并且您害怕在该签名中出错,那么您可以将函数类型声明提取为:

typealias组合器=(acc:R,nextElement:T)->R
然后在函数声明中使用该类型别名:

fun <T, R> Collection<T>.fold(initial: R, combine: Combiner<R, T>): R {
    var accumulator: R = initial
    for (element: T in this) {
        accumulator = combine(accumulator, element)
    }
    return accumulator
}
fun Collection.fold(首字母:R,combine:Combiner):R{
var累加器:R=初始值
for(本文件中的元素:T){
蓄能器=联合收割机(蓄能器,元件)
}
回流蓄能器
}

我不确定为什么需要以这种方式提取函数。所需的有问题的代码没有编译,为了提出一个可行的替代方案,需要知道您的实际意图

例如,如果您不想在参数类型中拼写长函数签名,可能是因为您有许多这样的函数使用该类型的函数参数,并且您害怕在该签名中出错,那么您可以将函数类型声明提取为:

typealias组合器=(acc:R,nextElement:T)->R
然后在函数声明中使用该类型别名:

fun <T, R> Collection<T>.fold(initial: R, combine: Combiner<R, T>): R {
    var accumulator: R = initial
    for (element: T in this) {
        accumulator = combine(accumulator, element)
    }
    return accumulator
}
fun Collection.fold(首字母:R,combine:Combiner):R{
var累加器:R=初始值
for(本文件中的元素:T){
蓄能器=联合收割机(蓄能器,元件)
}
回流蓄能器
}

您能告诉我如何使用我列出的代码吗,因为我似乎无法正确获取它。第一个代码块中的扩展函数可以编译。我直接从Kotlin文档中获取了这个。我想知道如何使用你的代码解决方案。你能告诉我如何使用我列出的代码吗,因为我似乎无法正确获得它。第一个代码块中的扩展函数确实可以编译。我直接从Kotlin文档中获取了这个。我想知道如何将您的解决方案用于该代码。