Issue #14148 has been updated by RickHull (Rick Hull).


After some clarifying discussions with @matthewd, I don't think is a problem for 2.5.  The overall behavior is consistent with 2.4, if surprising.  My surprise mostly revolves around the strange correspondence of toplevel with Object.  This bug report is not about the escalation of warning to `NameError`.

That said, it seems to me that constants defined on Kernel or BasicObject should be consistent with the behavior of constants defined on Object though.

~~~ ruby
module Kernel
  K = 1
end

class BasicObject
  B = 2
end

class Object
  O = 3
end

K #=> 1
B #=> 2
O #=> 3

String::K #=> 1
String::B #=> 2
String::O #=> NameError
~~~

I think we would want `NameError` for `String::K` and `String::B`

----------------------------------------
Bug #14148: Ruby 2.5.0-preview1 - NameError on scoped constant after toplevel constant is defined
https://bugs.ruby-lang.org/issues/14148#change-68142

* Author: RickHull (Rick Hull)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.5.0preview1 (2017-10-10 trunk 60153) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
~~~ ruby
module Kernel
  X = 1
end

puts String::X

X = 2

puts String::X
~~~

~~~
$ ruby test.rb
1
Traceback (most recent call last):
test.rb:9:in `<main>': uninitialized constant String::X (NameError)
Did you mean?  X

$ ruby --version
ruby 2.5.0preview1 (2017-10-10 trunk 60153) [x86_64-linux]
~~~



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>