クロージャをつくるクロージャについて
JSONArrayとしてgrailsに投げられたものをつかって、文字列ベースでクロージャのような形にするクロージャを通します。
def makeClosure = {List args -> def ret = "" ##ごにょごにょ return ret }
ここで返るのは"{-> ${method_name}(${arg1},${arg2})}"みたいなGString。これにEval.meというフツーは使わんぞこれというメソッドを通してクロージャオブジェクトを作ってます。Eval.meを見つけたときは「やべー」と喜んだものです。
def clo = Eval.me(makeClosure(args))
でもってこれで入れ子のJSONArrayをグルグルと回して、クロージャをつくるクロージャを再帰させて作ったクロージャオブジェクトをmetaClassを介して、PAppletをextendしたgroovyのクラスに当てがうわけです。
ちなみにコンテキスト的な質問もされたので、一応書いておくと、「fill」「background」などは一度だけ実行されるprocessingのメソッドの中につっこまれて、「draw」なんかはフレームの更新時に毎回実行されるところにつっこまれます。
ものすごくシンプルなアイデアです。3分ぐらいで考えたネタだしw ただgroovyで再帰するメソッドの書きかたは勉強になりました。
def clo = {stack, list-> //closure終了条件 if(!list instanceof List || list.size()==0){ return stack } else{ stack << list.remove(0) return call(stack, list) } }