トップ

それは多分,引数にMapを与えられたと勘違いされたからでしょうね。


Groovyの名前付き引数(Named parameters/Named arguments?)はあたしも気になっていたんですが,『まだ出来ない』ってのが今のところ正解のようです。
一応,User Guideの"Statements - Optional parenthesis"には出来そうなこと書いてあるんっスよねぇ。

It is also possible to omit parenthesis when using named arguments. This makes for nicer DSLs:

compare fund: "SuperInvestment", withBench: "NIKEI"
monster.move from: [3,4], to: [4,5]

でも,Feature Wish Listに"named parameters everywhere"とも書いてるし,何より,そうゆうコード書いても実際動かないし。:-(


ちなみに,http://pleac.sourceforge.net/pleac_groovy/で見つけたんですが,Mapが渡るのを逆手に取って,こんなコードで実現してました。
Passing by Named Parameterより

// named arguments work by using a map
def thefunc(Map args) {
    // in this example, we just call the positional version
    thefunc(args.start, args.end, args.step)
}

// positional arguments with defaults
def thefunc(start=0, end=30, step=10) {
    ((start..end).step(step))
}

assert thefunc()                        == [0, 10, 20, 30]
assert thefunc(15)                      == [15, 25]
assert thefunc(0,40)                    == [0, 10, 20, 30, 40]
assert thefunc(start:5, end:20, step:5) == [5, 10, 15, 20]

うーん,でもそれってどうよ?


ps.
試しに invokeMethod() で名前付き引数を解決できないかなぁ?と思って試してみましたが,リフレクションじゃ引数の型は分かっても名前がわからんってんで挫折しました。orz
Gant(AntBuilder?)ってどうやってんだろ?と思いつつも,なんとなく仕組みがわかったよーな。