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個とか渡さないわ。
だったら上の実装が現実的なのね。