前田です。

At Thu, 20 Sep 2001 16:50:44 +0900,
Yasushi Shoji <yashi / yashi.com> wrote:
> # cat test.rhtml 
> <% 
> $:.push '/var/www' 
>  
> require 'hoge' 
>  
> class Hoge 
>   begin 
>     alias :bar :foo 
>   rescue Exception => e 
>     puts e 
>   end 
> end 
> %>
> 
> と、言う状態で、test.rhtmlを browserで開くと
> 
> undefined method `foo' for class `#<Module 0lx402dfcc8>::Hoge'
> 
> と、表示されます。この anonymous moduleはナニモノなのでしょうか?

mod_rubyスクリプトはloadの第二引数にtrueを指定した状態でロードさ
れますので、トップレベルは匿名のモジュールになります。
これは不用意に他のスクリプトと共有しているクラスを変更してしまう
ことを避けるためです。

requireされるライブラリの方を変更するのが正攻法ですが、どうしても
スクリプトの方で変更したい場合は、

Hoge.module_eval do
  alias :bar :foo 
end

のようにすることができます。
ただし、変更はHogeを利用している他のスクリプトにも影響する点に注
意が必要です。

-- 
前田 修吾