2004-09-06 ========== Ruby PluginManager 3 -------------------- Reference URI: http://lowreal.net/logs/2004/09/06/1 Written Time: 2004-09-06T01:54:22+09:00 Tags: prog initialize にディレクトリ渡して、それ以下のファイルを全て読むようにしてみる。ただ し先頭にアンダースコア付いてるときは無視。一定時間ごとに reload_if_modified っつうのを呼び出せば勝手に読み込まれるし、アンダースコアをつければ勝手に開放され る。 結局宣言して、インスタンスを作成して適当なクラス変数につっこんだら直ぐに remove_const してみてる。 さーIRC (Internet Relay Chat) BOT で使ってみよう。 RO (Ragnarok Online) チャンネル用に告知巡回と鯖チェック・モンスデータ取得とか。モンスデータは今のとこ ろ回避しかやってないけど必中とかもやりたいもんだ。いちいちブラウザ起動するより早い 。どっかに生のデータないのかな。ローカルで MySQL に突っ込んだらよさそ。 class_eval のブロックを与えたときと文字列を与えたときの違い ----------------------------------------------------------- Reference URI: http://lowreal.net/logs/2004/09/06/2 Written Time: 2004-09-06T15:41:56+09:00 Tags: prog このメソッドの挙動がよくわからない。PluginBase.class_eval(%Q|@@irc = irc|) では思ったとおりだけど、PluginBase.class_eval { @@irc = irc } だと uninitilized class variable が出る。とりあえず前者にしとけば動くのでいいけど 、なんか気持ち悪い。 プラグイン側に API (Application Program(ming) Interface) を提供しようってわけだけど、そんなこと最初考えてなかったとかいうアフォさなので全 てのプラグインの先祖としてインターフェイスを宣言している PluginBase のクラス変数に 適当なメソッドを持ったオブジェクトを入れておけば、それにアクセスしてアレコレできん じゃねぇかなぁと。(継承したクラスとかでも全て共有されるし) 上の irc は class_eval の前で irc = self とかやってるやつ。だからプラグイン側でオーバーライドしてる on_join メソッド内で @@irc.notice(message, channel) とかやればメッセージが送れるハズ。って自分で書いてて思うけど意味わからん。 あぁ。もしや @@irc も外側ってことになってるのかな。