このメソッドの挙動がよくわからない。PluginBase.class_eval(%Q|@@irc = irc|) では思ったとおりだけど、PluginBase.class_eval { @@irc = irc } だと uninitilized class variable が出る。とりあえず前者にしとけば動くのでいいけど、なんか気持ち悪い。

プラグイン側に API を提供しようってわけだけど、そんなこと最初考えてなかったとかいうアフォさなので全てのプラグインの先祖としてインターフェイスを宣言している PluginBase のクラス変数に適当なメソッドを持ったオブジェクトを入れておけば、それにアクセスしてアレコレできんじゃねぇかなぁと。(継承したクラスとかでも全て共有されるし)

上の irc は class_eval の前で irc = self とかやってるやつ。だからプラグイン側でオーバーライドしてる on_join メソッド内で @@irc.notice(message, channel) とかやればメッセージが送れるハズ。って自分で書いてて思うけど意味わからん。

あぁ。もしや @@irc も外側ってことになってるのかな。

  1. トップ
  2. prog
  3. class_eval のブロックを与えたときと文字列を与えたときの違い
▲ この日のエントリ