[ruby-core:93791] [Ruby master Bug#4484] Class variables leak to Object when using class_eval
From:
merch-redmine@...
Date:
2019-07-15 16:51:30 UTC
List:
ruby-core #93791
Issue #4484 has been updated by jeremyevans0 (Jeremy Evans).
Backport set to 2.5: UNKNOWN, 2.6: UNKNOWN
Status changed from Open to Rejected
Description updated
Project changed from Ruby 1.8 to Ruby master
This is still true in master, but I believe this is expected behavior/spec. This is similar to constants:
```ruby
String.class_eval {A = 1}
Object::A
# => 1
```
If you want to scope constants or class variables, you need to reopen the class using `class` syntax:
```ruby
class String
@@string_class_variable = 'should be only in String'
A = 1
end
Object.class_variables.include? :@@string_class_variable
# => false
Object::A
# NameError (uninitialized constant A)
```
----------------------------------------
Bug #4484: Class variables leak to Object when using class_eval
https://bugs.ruby-lang.org/issues/4484#change-79540
* Author: pawel (Paweł P)
* Status: Rejected
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
=begin
The following irb session describes the problem:
>> String.class_eval { @@string_class_variable = 'should be only in String' }
=> "should be only in String"
>> "WTF?" if Object.class_variables.include? "@@string_class_variable"
=> "WTF?"
Tested on 1.8 and 1.9.
I've created the issue in "ruby-18" project because "ruby" project doesn't allow to create new issues.
=end
--
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>