【发布时间】:2016-02-11 16:46:42
【问题描述】:
对于我正在编写的 DSL,有时我想返回一个忽略所有调用的虚拟对象。
这行得通:
class Dummy {
def methodMissing(String name, args) { print "Ignoring: "+name+" "+args }
}
def foo(guardCondition) {
if (guardCondition)
return new Dummy()
// ...
}
foo(true).with { bar('baz') }
但如果我尝试使用匿名类,结果会出现类似No signature of method: <filename>.bar() is applicable for argument types: (java.lang.String) values: [baz]的错误
也就是说这不起作用:
if (guardCondition)
return new Object() { def methodMissing(String name, args) { print "Ignoring: "+name+" "+args } }
“袋子”方法也不起作用:
if (guardCondition)
return [ methodMissing : { name, args -> print "Ignoring: "+name+" "+args } ]
【问题讨论】:
标签: groovy anonymous-types anonymous-class