From: Minero Aoki Date: 2002-09-22T06:43:53+09:00 Subject: [ruby-dev:18344] method visibility on toplevel あおきです。 以下のように、トップレベルでブロックを使って Object の メソッドを定義すると常に private で定義されます。 ~/t/rhg % ruby -ve ' Object.module_eval { def ok() puts "ok" end } Object.new.ok ' ruby 1.7.3 (2002-09-13) [i686-linux] -e:5: private method `ok' called for # (NoMethodError) また関連の問題として「main.public が意味ないような気がする」と いう疑問が新井さんからあがってます。 こんなのでどうでしょ。 --- eval.c 17 Sep 2002 13:52:45 -0000 1.331 +++ eval.c 21 Sep 2002 21:16:20 -0000 @@ -3172,7 +3172,7 @@ rb_eval(self, n) else if (SCOPE_TEST(SCOPE_PROTECTED)) { noex = NOEX_PROTECTED; } - else if (ruby_class == rb_cObject) { + else if (ruby_class == rb_cObject && self == ruby_top_self) { noex = node->nd_noex; } else { ------------------------------------------------------------------- 青木峰郎