[#79440] [Ruby trunk Bug#13188] Reinitialize Ruby VM. — shyouhei@...
Issue #13188 has been updated by Shyouhei Urabe.
6 messages
2017/02/06
[#79441] Re: [Ruby trunk Bug#13188] Reinitialize Ruby VM.
— SASADA Koichi <ko1@...>
2017/02/06
On 2017/02/06 10:10, shyouhei@ruby-lang.org wrote:
[#79532] Immutable Strings vs Symbols — Daniel Ferreira <subtileos@...>
Hi,
15 messages
2017/02/15
[#79541] Re: Immutable Strings vs Symbols
— Rodrigo Rosenfeld Rosas <rr.rosas@...>
2017/02/15
Em 15-02-2017 05:05, Daniel Ferreira escreveu:
[#79543] Re: Immutable Strings vs Symbols
— Daniel Ferreira <subtileos@...>
2017/02/16
Hi Rodrigo,
[#79560] Re: Immutable Strings vs Symbols
— Rodrigo Rosenfeld Rosas <rr.rosas@...>
2017/02/16
Em 15-02-2017 22:39, Daniel Ferreira escreveu:
[ruby-core:79506] [Ruby trunk Feature#2740] Extend const_missing to pass in the nesting
From:
najamelan@...
Date:
2017-02-12 16:22:07 UTC
List:
ruby-core #79506
Issue #2740 has been updated by Naja Melan.
This would still be very useful for people implementing auto loading systems, not just Rails
----------------------------------------
Feature #2740: Extend const_missing to pass in the nesting
https://bugs.ruby-lang.org/issues/2740#change-62955
* Author: Yehuda Katz
* Status: Assigned
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Target version: next minor
----------------------------------------
=begin
At the moment, it is impossible for const_missing to differentiate between these cases:
class Foo::Bar
Baz
end
class Foo
class Bar
Baz
end
end
In Rails, we implement a class loading system that loads classes from the file system if they are not found. In the above case, Foo::Baz might be stored in app/models/foo/baz.rb. We would like to be able to use the same Ruby constant lookup logic when looking up classes from the file system.
class Foo::Bar
Baz
end
Here, we should look in "app/models/foo/bar/baz.rb" and in "app/models/baz.rb" just as Ruby would search for Foo::Bar::Baz and then Object::Baz.
class Foo
class Bar
Baz
end
end
Here, we should look in "app/models/foo/bar/baz.rb", then "app/models/foo/baz.rb", and finally "app/models/baz.rb" just as Ruby would search for Foo::Bar::Baz, then Foo::Baz, and then Object::Baz.
In order to achieve this, I propose that we extend the const_missing method to take an optional second parameter containing the nesting:
class Foo
class Bar
def self.const_missing(id, nesting)
id == :Baz
nesting == [Foo::Bar] # first case
nesting == [Foo::Bar, Foo] # second case
end
end
end
This would allow people who wish to do their own custom constant loading (such as Rails) to do so in a way that is consistent with Ruby's own constant lookup. In order to avoid backward-compatibility issues, we can check the arity of the const_missing method, and only pass in the nesting if a second parameter was provided.
=end
---Files--------------------------------
const_missing_nesting.diff (621 Bytes)
const_missing_murphy.patch (2.56 KB)
--
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>