Project

General

Profile

Bug #13099

Binding#irb does not work outside of irb

Added by snood1205 (Eli Sadoff) over 1 year ago. Updated 8 months ago.

Status:
Closed
Priority:
Normal
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)

Associated revisions

Revision 7802f01d
Added by nobu (Nobuyoshi Nakada) over 1 year ago

prelude.rb: Binding#irb [ci skip]

  • prelude.rb (Binding#irb): [EXPERIMENTAL] automatically require irb and run. [Bug #13099]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 57274
Added by nobu (Nobuyoshi Nakada) over 1 year ago

prelude.rb: Binding#irb [ci skip]

  • prelude.rb (Binding#irb): [EXPERIMENTAL] automatically require irb and run. [Bug #13099]

Revision 57274
Added by nobu (Nobuyoshi Nakada) over 1 year ago

prelude.rb: Binding#irb [ci skip]

  • prelude.rb (Binding#irb): [EXPERIMENTAL] automatically require irb and run. [Bug #13099]

History

#1 [ruby-core:78959] Updated by snood1205 (Eli Sadoff) over 1 year ago

  • Description updated (diff)

#2 [ruby-core:78967] Updated by nobu (Nobuyoshi Nakada) over 1 year ago

  • Status changed from Open to Rejected

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

#3 [ruby-core:78984] Updated by Eregon (Benoit Daloze) over 1 year 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.

#4 [ruby-core:78989] Updated by shyouhei (Shyouhei Urabe) over 1 year ago

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

#5 [ruby-core:78993] Updated by Eregon (Benoit Daloze) over 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).

#6 [ruby-core:83941] Updated by nobu (Nobuyoshi Nakada) 8 months ago

  • Status changed from Rejected to Closed

I had changed the mind, sorry.

Also available in: Atom PDF