You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy中柯里化闭包以实现cp src dest式调用?

实现Groovy中cp src dest风格的调用

其实实现你想要的调用方式很简单,甚至不需要复杂的操作,我们一步步来看:

首先,先还原你已经写好的代码(补全Java方法的示例逻辑方便测试):

// 示例Java方法实现
void copy(Object src, Object dest) {
    println "Copying content from $src to $dest"
}

def copyGroovy = { p1, p2 -> copy(p1,p2) } 
def copyFixP1 = { p1 -> copyGroovy.curry(p1) } 

方案1:最直接的实现(仅支持cp src dest)

如果你只是想让cp可以像cp src dest这样直接传两个参数调用,那直接把cp指向你已经定义好的copyGroovy闭包就行——Groovy里闭包调用允许省略括号,天然支持这种简洁写法:

def cp = copyGroovy

// 现在就能这样调用啦:
cp "mySourceFile.txt" "myDestFile.txt"

方案2:支持灵活调用(直接传参+部分应用)

如果你还希望cp能支持部分应用(比如先绑定源参数,得到一个只需要目标参数的闭包),同时保留cp src dest的调用形式,那可以写一个能处理不同参数个数的闭包:

def cp = { Object... args ->
    switch(args.length) {
        case 2:
            copy(args[0], args[1])
            break
        case 1:
            // 返回绑定了第一个参数的闭包,后续只需传入目标参数
            return { dest -> copy(args[0], dest) }
        default:
            throw new IllegalArgumentException("cp 需要传入1或2个参数")
    }
}

// 两种调用方式都能用:
// 1. 直接传两个参数
cp "source1.txt" "dest1.txt"

// 2. 先绑定源参数,再传目标参数
def cpSource2 = cp "source2.txt"
cpSource2 "dest2.txt"

这种方式兼顾了两种使用场景,完全符合Groovy灵活的函数式编程特性~

内容的提问来源于stack exchange,提问作者SharePoint Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:50:57