青山です。

mod_ruby でも試してみたところ、少し非互換がありました。

foo = "foo"
bar = proc{ "foo" }
def baz
  "foo"
end

require "html/xhtml1"
html = HTML::XHtml1.new do
  html do
    foo
    bar.call
    #baz  # NoMethodError!
  end
end

これはコマンドラインや通常の CGI では問題なく動きますが、mod_ruby では
トップレベルをすり替えている為に、トップレベルで定義したメソッドが、う
まく利用できていない、という事だと思われます。

なるほど、トップレベルもオブジェクトなんだ、と感じさせられました。

お手軽プログラミングとしては、この非互換は少し困りますが、純粋なオブジェ
クト指向言語の動きとしては、変数とメソッドの違いを再認識する良い機会、
という感じもしないでもないです。

という事で、このままでも良さそうでもありますが、トップレベルもオブジェ
クトである事や、メソッドと変数の違いなどを把握していないと気が付きにく
い問題ではあるので、もし対応可能ならば、mod_ruby でのトップレベルの扱
いに、より互換性をもたせていただけると嬉しいです。


-- 
青山 和光 Wakou Aoyama  <wakou / ruby-lang.org>