-
Notifications
You must be signed in to change notification settings - Fork 141
Closed as not planned
Closed as not planned
Copy link
Description
In Ruby 2.6.6, you cannot use Etc constant without requring etc library:
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin19]"
irb(main):002:0> Etc
Traceback (most recent call last):
4: from /Users/jnito/.rbenv/versions/2.6.6/bin/irb:23:in `<main>'
3: from /Users/jnito/.rbenv/versions/2.6.6/bin/irb:23:in `load'
2: from /Users/jnito/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
1: from (irb):2
NameError (uninitialized constant Etc)
But in Ruby 2.7.2, you can do it:
irb(main):001:0> RUBY_DESCRIPTION
=> "ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19]"
irb(main):002:0> Etc
=> Etc
However, you cannot use Etc constant in plain script context:
$ ruby -e "puts RUBY_DESCRIPTION; Etc"
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19]
Traceback (most recent call last):
-e:1:in `<main>': uninitialized constant Etc (NameError)
Etc is defined not in core API but in standard library. So Ruby does not require it by default, but irb does in Ruby 2.7. This inconsistent behavior confuses newbies. Actually I was asked such a question today.
As far as I investigated, irb requires some other libraries like fileutils, set and so on. But I think irb should run in the same context as plain script, if possible.
Metadata
Metadata
Assignees
Labels
No labels