みどりねこ日記

よくわからないけど、頑張りますよ。

Clojure内部のメソッド定義について

最近Clojureのコード読んでたんですが、いたるところ(このへんとか)に

public Object invoke() ;

public Object invoke(Object arg1) ;

public Object invoke(Object arg1, Object arg2) ;

public Object invoke(Object arg1, Object arg2, Object arg3) ;

public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) ;

...といった調子でメソッドが定義されててギョェ〜〜ってなってた。

なんで可変長引数使わないのかよくわからなかったのでIRCに投げてみたところ、可変長引数はコストが大きいんだそうで。だからJVMの速度的な問題でこのような実装になっているとのこと。

うえのinvokeメソッドはClojureの関数を引数に適用するメソッドなわけなのですが、なるほど確かに関数に引数1000個とか渡さないわ。

だったら上の実装が現実的なのね。