Project

General

Profile

Actions

Bug #13099

closed

Binding#irb does not work outside of irb

Added by snood1205 (Eli Sadoff) over 7 years ago. Updated over 6 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin15]
[ruby-core:78960]

Description

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

binding.irb

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)

Updated by snood1205 (Eli Sadoff) over 7 years ago

  • Description updated (diff)

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

  • Status changed from Open to Rejected

You have to require "irb" by yourself.
No plan to autoload "irb" by binding.irb now.

Updated by Eregon (Benoit Daloze) over 7 years ago

Nobuyoshi Nakada wrote:

You have to require "irb" by yourself.
No plan to autoload "irb" by binding.irb now.

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.

Updated by shyouhei (Shyouhei Urabe) over 7 years ago

Silently requiring something reminds me of multi-threaded autoload situation. Is it OK?

Updated by Eregon (Benoit Daloze) over 7 years 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).

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

  • Status changed from Rejected to Closed

I had changed the mind, sorry.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0