考虑使用Groovy脚本:
class Scaffold{
def methodMissing(String name, args) {
println name
println args[0]
println args[1]
}
}
new Scaffold().field('VendorId', 'entity': 'Vendor', 'value': '1');
当我运行它时,输出是:
field
[entity:Vendor, value:1]
VendorId
我期待args [0]为'VendorId'而args [1]为地图。
为什么订单似乎被逆转的任何想法?这种行为会保持一致吗?
答案 0 :(得分:3)
这是正确的。在Groovy中,将收集方法调用中的所有映射条目并将其作为第一个参数传入。在methodMissing
中,它们作为arguments数组中的第一个元素传递:
def methodMissing(String name, args) {
"$name ${args[0]} ${args[1]}"
}
assert foo(a: 1, 'john doe', b: 2) == "foo [a:1, b:2] john doe"
对于非遗漏方法调用:
def method(map, name) { "$map $name" }
assert method(a: 1, 'test', b: 2) == "[a:1, b:2] test"
如果使用方括号声明地图,则可以强制执行地图正常顺序:
def methodMissing(String method, args) {
"$method ${args[0]} ${args[1]}"
}
assert echo("foo", [a: 1, b: 2]) == "echo foo [a:1, b:2]"
http://mrhaki.blogspot.com.br/2009/09/groovy-goodness-named-parameters-are.html