gpt4 book ai didi

绑定(bind)和闭合 groovy

转载 作者:行者123 更新时间:2023-12-02 17:55:09 25 4
gpt4 key购买 nike

我不知道如何在 Groovy 中使用闭包绑定(bind)。我编写了一个测试代码,在运行它时,它说,在作为参数传递的闭包上缺少方法 setBinding

void testMeasurement() {
prepareData(someClosure)
}
def someClosure = {
assertEquals("apple", a)
}


void prepareData(testCase) {
def binding = new Binding()
binding.setVariable("a", "apple")
testCase.setBinding(binding)
testCase.call()

}

最佳答案

这对我来说适用于 Groovy 1.7.3:

someClosure = {
assert "apple" == a
}
void testMeasurement() {
prepareData(someClosure)
}
void prepareData(testCase) {
def binding = new Binding()
binding.setVariable("a", "apple")
testCase.setBinding(binding)
testCase.call()
}
testMeasurement()

在此脚本示例中,setBinding 调用正在脚本绑定(bind)中设置 a (如您所见 from the Closure documentation ,没有 setBinding 调用)。所以在setBinding调用之后,你可以调用

println a

它会打印出“apple”

因此,要在类中执行此操作,您可以为闭包设置委托(delegate)(当在本地找不到属性时,闭包将恢复为该委托(delegate)),如下所示:

class TestClass {
void testMeasurement() {
prepareData(someClosure)
}

def someClosure = { ->
assert "apple" == a
}

void prepareData( testCase ) {
def binding = new Binding()
binding.setVariable("a", "apple")
testCase.delegate = binding
testCase.call()
}
}

它应该从委托(delegate)类(在本例中为绑定(bind))中获取 a 的值

This page here详细介绍委托(delegate)的使用以及闭包中变量的范围

事实上,您应该能够使用像这样的简单 Map,而不是使用 Binding 对象:

  void prepareData( testCase ) {
testCase.delegate = [ a:'apple' ]
testCase.call()
}

希望对你有帮助!

关于绑定(bind)和闭合 groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3236699/

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