Binding#irb does not work outside of irb
I had read that one of the new features of 2.4.0 is that
Binding#irb is now a method, so I decided to test this out in a program I was working on. Here is the program
class Test attr_accessor :x, :y, :z def initialize(x, y, z) @x = x @y = y binding.irb @z = z end end a = Test.new(1, 2, 3)
And the error that I got is
binding_test.rb:6:in `initialize': undefined method `irb' for #<Binding:0x007f8562025078> (NoMethodError) from binding_test.rb:11:in `new' from binding_test.rb:11:in `<main>'
So, I thought that maybe it was an issue with running it in a constructor, so I tried the simpler invocation
but I had a problem with that as well, with a very similar error message
bind.rb:1:in `<main>': undefined method `irb' for #<Binding:0x007ff34984e880> (NoMethodError)
#3 [ruby-core:78984] Updated by Eregon (Benoit Daloze) about 1 year ago
Nobuyoshi Nakada wrote:
You have to
require "irb"by yourself.
No plan to autoload "irb" by
I also expected from the description in NEWS that Binding#irb would automatically require irb.
That would be really useful as a debugging tool, as it would literally mean adding "binding.irb" and no need for extra code.
#5 [ruby-core:78993] Updated by Eregon (Benoit Daloze) about 1 year ago
Shyouhei Urabe wrote:
Silently requiring something reminds me of multi-threaded autoload situation. Is it OK?
Since require is thread-safe, I think the only requirement in this case is that all threads trying to touch IRB first need to require "irb"
(so trying to optimize with e.g. require "irb" unless defined?(IRB) would be bad).