- 191 名前:デフォルトの名無しさん mailto:sage [2015/03/18(水) 03:39:54.16 ID:smUcV4wp.net]
- symbol-property-listでの力技を作ってしまおうかと思ったら先を越されてた。
>>188 もとの疑問を離れてその目的ならということだけど、 単純にその重い処理を関数として渡してしまうのがいいのでは。 よくthunkと言われる方法。 (defun conditional-trace (x thunk) (when x (funcall thunk)) としておいて (conditional-trace t (lambda () (heavy-message-generate)) とか (conditional-trace t #'heavy-message-generate) とか。 そのpythonの例でも同様に def conditional_trace(ctrl, func): if ctrl: print func() return conditional_trace(True, lambda:heavy_message_generate()) conditional_trace(True, heavy_message_generate) 遅延評価する言語も中身はこういう感じの実装だったと思う。 C/C++は関数が第一級データ型じゃないので相当面倒になるが、 頑張ればできるはず…(最近のC++にはラムダ式入ったみたいだけど)。 C/C++のプロプロセッサだと動的に条件を変えたくなったら困らない? デバッグオプション付きで走らせた時だけトレースが欲しいとかもできなく なっちゃうし。 あとちょっと複雑なことやろうとすると急速に黒魔術化するイメージがある。
|

|