使用 methodMissing 的匿名 class
Anonymous class with methodMissing
对于我正在编写的 DSL,有时我想 return 一个忽略所有调用的虚拟对象。
这个有效:
class Dummy {
def methodMissing(String name, args) { print "Ignoring: "+name+" "+args }
}
def foo(guardCondition) {
if (guardCondition)
return new Dummy()
// ...
}
foo(true).with { bar('baz') }
但如果我尝试使用匿名 class,结果会出现类似 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 } }
"bag" 方法也行不通:
if (guardCondition)
return [ methodMissing : { name, args -> print "Ignoring: "+name+" "+args } ]
有一个关于此的未决问题:GROOVY-4862。事实上,它在内部 class 中不起作用,无论是否匿名。
对于我正在编写的 DSL,有时我想 return 一个忽略所有调用的虚拟对象。
这个有效:
class Dummy {
def methodMissing(String name, args) { print "Ignoring: "+name+" "+args }
}
def foo(guardCondition) {
if (guardCondition)
return new Dummy()
// ...
}
foo(true).with { bar('baz') }
但如果我尝试使用匿名 class,结果会出现类似 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 } }
"bag" 方法也行不通:
if (guardCondition)
return [ methodMissing : { name, args -> print "Ignoring: "+name+" "+args } ]
有一个关于此的未决问题:GROOVY-4862。事实上,它在内部 class 中不起作用,无论是否匿名。