绑定 – 当通过委托绑定时,Groovy闭包短格式方法调用不起作用?

绑定 – 当通过委托绑定时,Groovy闭包短格式方法调用不起作用?,第1张

概述我创建了一个代码示例,显示了我遇到的问题: class BindingExample { public static void main(String[] args) { Closure closure1 = { printit.call("Hello from closure 1") } Closure clo @H_419_1@ 我创建了一个代码示例,显示了我遇到的问题:

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闭包短格式方法调用不起作用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存