Groovy中的链(组合)方法调用
我有一个变量和几个方法,我想按顺序调用,其中一个方法的返回值是另一个方法的输入。基本上是一条管道。现在,有没有办法把电话联系起来?在伪代码中,它看起来像Groovy中的链(组合)方法调用,groovy,clojure,Groovy,Clojure,我有一个变量和几个方法,我想按顺序调用,其中一个方法的返回值是另一个方法的输入。基本上是一条管道。现在,有没有办法把电话联系起来?在伪代码中,它看起来像 def a = [1, 2, 3] def b = calculation3(calculation2(calculation1(a))) 正如您所看到的,它看起来非常类似于Clojure,我希望以类似的方式结束(使用Clojure语法) 我希望将与关键字一起使用,但它只传递变量a,而不收集结果并将其作为输入传递给下一个方法 到目前为止,我找
def a = [1, 2, 3]
def b = calculation3(calculation2(calculation1(a)))
正如您所看到的,它看起来非常类似于Clojure,我希望以类似的方式结束(使用Clojure语法)
我希望将与
关键字一起使用,但它只传递变量a
,而不收集结果并将其作为输入传递给下一个方法
到目前为止,我找到的唯一有效的解决方案是这样的“闭包组合”。但这对我来说似乎太严厉了
def a = [1, 2, 3]
def b = (class1.&calculation1 >> class1.&calculation2 >> class1.&calculation3)(a)
有什么想法吗?您可以编写一个函数来执行此操作:
def chain(a, Closure... fns) {
fns.toList().inject(a) { v, c -> c(v) }
}
然后在代码中调用此选项:
chain(a, class1.&calculation1,class1.&calculation2,class1.&calculation3)
您可以编写一个函数来执行此操作:
def chain(a, Closure... fns) {
fns.toList().inject(a) { v, c -> c(v) }
}
然后在代码中调用此选项:
chain(a, class1.&calculation1,class1.&calculation2,class1.&calculation3)
我仔细考虑了一下,得出了如下结论:
def compose = {...c ->
{result ->
c.each {
result = it(result)
}
result
}
}
def a = [1, 2, 3]
def b = compose(class1.&calculation1, class1.&calculation2, class1.&calculation3)(a)
但还是不如Clojure的线程好 我仔细考虑了一下,得出了如下结论:
def compose = {...c ->
{result ->
c.each {
result = it(result)
}
result
}
}
def a = [1, 2, 3]
def b = compose(class1.&calculation1, class1.&calculation2, class1.&calculation3)(a)
但还是不如Clojure的线程好 使用
注入
def pipe(fn, ...fns) {
{ args ->
fns.inject(fn(args)) { acc, value ->
value(acc)
}
}
}
不允许第一个函数接受可变数量的参数,而不允许以下参数。使用inject
def pipe(fn, ...fns) {
{ args ->
fns.inject(fn(args)) { acc, value ->
value(acc)
}
}
}
不允许第一个函数接受可变数量的参数,而不允许以下参数。改用Clojure?:)我很乐意,但我正在做的项目是Groovy/Grailst最后一个看起来和Clojure非常接近。至少跨多行时。我的问题是,它在内部会生成两个以上的闭包。请改用Clojure?:)我很乐意,但我正在做的项目是Groovy/Grailst最后一个看起来和Clojure非常接近。当至少跨越多行时。我的问题是,它在内部会生成另外两个closures.Neat。很遗憾Groovy需要所有的Foo&func
或this&func
噪音。如果foo()可以解析为直接方法调用(假设存在),那么&foo
(或类似内容)应该能够解析为不带前缀.Neat的方法引用。很遗憾Groovy需要所有的Foo&func
或this&func
噪音。如果foo()可以解析为直接方法调用(假设它存在),那么&foo
(或类似内容)应该能够解析为不带前缀的方法引用。