ただただしです。
2009/9/1 Kazuhiko <kazuhiko@...>:
> (*) キモいevalの例 navi_user.rb:
> eval( <<MODIFY_CLASS, TOPLEVEL_BINDING )
> module TDiary
> class TDiaryMonthWithoutFilter < TDiaryMonth
> def referer_filter(referer); end
> end
> end
> MODIFY_CLASS
>
> たぶん近いうちにRuby 1.9側で修正してくれる気がしますが、それはそれとし
> て、ここで、ただのmodule定義ではなく、キモいevalをしている理由って何でし
> たっけ?
(例によっていい加減な)記憶の糸をたどると、かつてのRubyではこうしないと
トップレベルのモジュールを深いところで定義できなかったんだと思う。うそ
かも知れないけど。いまならeval抜きでこうできますね:
module ::TDiary
〜
end
試しにmakerss.rbの実装を上記のように変更してみました。ruby 1.8.7-p72以降
と1.9.2では問題なく動作してるようです。
> また、何らかの理由があるとしても、オフィシャルプラグインで必要とされてい
> る機能で、特に害をあたえなさそうなものは、本体(tdiary.rb)側にとりこん
> でしまいませんか?
少なくともuser_navi.rbはその機能全体を取り込むのは規定路線なのでなんとか
したいです。その他のプラグインに関しては吟味が必要かも。update時にしか
動かないものは入れなくてもいいだろうし(makerss.rbはこっち)。
> というわけで、以下、キモいevalのあるプラグイン一覧。
> counter.rb
> disp_referrer.rb
> makelirs.rb
> makerss.rb
> navi_user.rb
> pb-show.rb
> recent_list.rb
> tb-show.rb
> title_tag.rb
「自分はこれのメンテナだ」という自覚のある人、ちょっと確認してみてもら
えますか?
--
ただただし - ツッコミは、短く鋭く愛を込めて♪
http://tdtds.jp/
@tdtds
|