From: "davidbalbert (David Albert)" Date: 2012-06-27T08:06:15+09:00 Subject: [ruby-dev:45856] [ruby-trunk - Bug #5776] irb のトップレベルで定義したメソッドが public になる Issue #5776 has been updated by davidbalbert (David Albert). File 0001-make-top-level-methods-defined-in-IRB-private.patch added I ran into this bug recently and I did a bit of investigating. This is due to a change introduced by #3406 (r29578) that made inner method definitions public regardless of the visibility of the method they were defined in. I've attached a patch that calls `private` in the `irb_binding` method before returning the binding, which fixes the problem. I also verified that context mode 3 was the only mode affected by r29578 and that IRB works correctly when started via the command line and via `IRB.start`. ---------------------------------------- Bug #5776: irb のトップレベルで定義したメソッドが public になる https://bugs.ruby-lang.org/issues/5776#change-27503 Author: hibariya (hi hibariya) Status: Assigned Priority: Normal Assignee: keiju (Keiju Ishitsuka) Category: lib Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2011-12-15 trunk 34056) [x86_64-darwin11.2.0] irb のトップレベルで定義したメソッドの呼び出し制限が private ではなく public になってしまいます。 ------------------------------------------------- irb(main):001:0> def greeting irb(main):002:1> 'hi' irb(main):003:1> end => nil irb(main):004:0> val = Object.new => # irb(main):005:0> val.greeting => "hi" irb(main):006:0> val.private_methods.grep /greeting/ => [] irb(main):007:0> val.public_methods.grep /greeting/ => [:greeting] ------------------------------------------------- public になるのは irb で実行したときのみです(ファイルに保存して ruby コマンドで実行した場合は private メソッドとして定義されます)。 -- http://bugs.ruby-lang.org/