2010-04-11
- 22:57 @making 確かに試してみたけど駄目でした。うむ、まだマクロの使い方や使い所というのをうまく捕らえられていない感じだな。 [in reply to making]
- 21:32 (defmacro func [funcname & args] `(~(symbol funcname) ~@args)) というマクロを書けば、自分がやりたいことが実現出来そう。関数名の文字列を引数で渡して実行する。 #clojure
- 19:38 @making マクロの方がまだよく分かっていないので、その辺りは今後調べようと思います。マクロというのが展開してS式を返すんだから、そちらで実行したほうがよりスマートなのか。 [in reply to making]
- 18:27 -main関数に関数名を文字列で渡し、それをsymbol関数で評価してevalすれば処理を動的に切り替えられる。ちょっと面倒だけど、Javaでリフレクション使うよりは楽なはず。もっと楽な方法があるかは分からない。 #clojure
- 18:13 #clojure の-main関数使って起動するとき、"(defn -main [arg1 arg2 & args] (str arg1 arg2 args))" のように引数を明示的に記述すれば、ちゃんとバインドしてくれるのは良い。自分で引数取り出して、セットする手間が省ける。
- 17:46 *1 1 2)) のようにすれば文字列を関数名として扱えることも。 #clojure
- 17:45 (eval (read-string "(+ 1 2)")) のように文字列をread-stringしてevalすれば実行できることが分かった。 #clojure
- 09:33 #clojure で空のリストをnil?関数で比較しようとして失敗していた。empty?関数で無いと駄目なのか。
Powered by twtr2src
*1:eval (symbol "+"