class BindingExample { public static voID main(String[] args) { Closure closure1 = { printit.call("Hello from closure 1") } Closure closure2 = { printit("Hello from closure 2") } Closure printit = { s -> println("printing: "+s) } Binding binding = new Binding() binding.setvariable("printit",printit) closure1.delegate = binding closure2.delegate = binding closure1() //This works fine closure2() //This does not. //Why does .call() work and () alone not? Most documentation says they're the same. }}
Printit是一个Closure,documentation表示实现了doCall,因此可以通过()以简短形式调用.
但是,当通过绑定到委托来使此闭包可用时,只允许调用的长格式版本.输出是:
printing: Hello from closure 1Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: groovy.lang.Binding.printit() is applicable for argument types: (java.lang.String) values: [Hello from closure 2]
有人可以解释为什么会这样吗?如果可能的话,我还想看看如何制作它,以便短版本的版本有效.我能够通过将printit定义为一个合适的静态方法(不是闭包)来使它工作,但这对我的情况不起作用,因为我实际上需要printit给出一些仅在方法范围内可用的数据(不包括在内)在示例中,因为我的问题涉及绑定本身).
解决方法 至于为什么会这样,遗憾的是我无法给出明确的答案.有一些关于隐式 – “这个”注释等的讨论,似乎它应该有用,但是对于应该首先尝试的内容(这个范围或委托)有一些模糊性.目前,这个问题似乎是正确的.我发现以下其他资源都是一致的,有些讨论没有解决原因.
关于这个问题的讨论:
http://groovy.329449.n5.nabble.com/Binding-Closure-property-not-called-as-method-td5562137.html
JIRA票证产生:
http://jira.codehaus.org/browse/GROOVY-5367
以上是内存溢出为你收集整理的绑定 – 当通过委托绑定时,Groovy闭包短格式方法调用不起作用?全部内容,希望文章能够帮你解决绑定 – 当通过委托绑定时,Groovy闭包短格式方法调用不起作用?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)