gpt4 book ai didi

常规 DSL : How to hide closure parameter?

转载 作者:行者123 更新时间:2023-12-01 08:14:41 26 4
gpt4 key购买 nike

我正在尝试使用 Groovy 实现迷你 DSL:

def parent(closure){
def container = new ArrayList<>()
closure.call(container)
container
}

def child(element, parent) {
println "add child$element to parent"
parent.add(element)
}

parent{ it->
child(1, it)
child(2, it)
}

但我想删除 it 参数以使其看起来更好,如下所示:

parent{ 
child(1)
child(2)
}

这样可以吗?非常感谢。

最佳答案

这不是一个完整的解决方案,只是一个例子,但我认为,你应该这样做:

class Parent{
def container = new ArrayList<>()
def child(element) {
println "add child$element to parent"
container.add(element)
}

def parent(Closure closure){
closure.delegate = this
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.call()
container
}
}


new Parent().parent {
child(1) // Here we are trying to resolve child method in our delegate, then owner.
child(2)
}

当然,您以后可以删除新的 Parent,这只是简单的示例,向您展示委托(delegate)魔法。

关于常规 DSL : How to hide closure parameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20963076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com