Module#parent is defined in introspection.rb as def parent parent_name = name.split(''::'')[0..-2] * ''::'' parent_name.empty? ? Object : parent_name.constantize end And dependencies.rb defines Class#const_missing as def const_missing(class_id) if [Object, Kernel].include?(self) || parent == self super end ... end If the || is not redundant there has to be a self different from Object whose parent is himself, but I can''t figure out an example. Just to understand that line, is there any? -- fxn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
For Object, "parent" would be == self, but Object is special-cased in the first half of the condition. IMO, the second condition is redundant. On Nov 10, 2007 10:15 PM, Xavier Noria <fxnoria@gmail.com> wrote:> > Module#parent is defined in introspection.rb as > > def parent > parent_name = name.split(''::'')[0..-2] * ''::'' > parent_name.empty? ? Object : parent_name.constantize > end > > And dependencies.rb defines Class#const_missing as > > def const_missing(class_id) > if [Object, Kernel].include?(self) || parent == self > super > end > ... > end > > If the || is not redundant there has to be a self different from > Object whose parent is himself, but I can''t figure out an example. > Just to understand that line, is there any? > > -- fxn > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
On Nov 12, 12:22 am, "Mislav Marohnić" <mislav.maroh...@gmail.com> wrote:> For Object, "parent" would be == self, but Object is special-cased in the > first half of the condition. > IMO, the second condition is redundant.We need to be certain as well that if parent == self then self =Object. After thinking about this a bit I think that follows clearly from the definition of Module#parent because the name of a class is unrelated to the constant you use to access to it. So even if you do something perverse as class A A = A end where A::A == A holds true (1), it is *not* the case that A::A.parent == A (which would be == self by (1)). On the contrary, it is the case that A::A.parent == A.parent == Object because Module#parent works on the module name. In addition, as far as I can tell the Kernel in [Object, Kernel].include?(self) is also redundant because that''s Class#const_missing. If self is the Kernel module we''ll go directly to Module#const_missing. So the test would be reduced to if self == Object # this is a top-level constant super else ... end I''ve uploaded this to Trac: http://dev.rubyonrails.org/ticket/10141 -- fxn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
> We need to be certain as well that if parent == self then self => Object.This seems like a reasonable assumption, but I''d prefer to hold off changing dependencies.rb until we''ve released 2.0. Hopefully we''ll have a branch for it in a few weeks. Out of interest, what caused you to start looking around in there? -- Cheers Koz --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
On Nov 12, 5:12 am, "Michael Koziarski" <mich...@koziarski.com> wrote:> > We need to be certain as well that if parent == self then self => > Object. > > This seems like a reasonable assumption, but I''d prefer to hold off > changing dependencies.rb until we''ve released 2.0. Hopefully we''ll > have a branch for it in a few weeks.Sure that''s sensible, excellent!> Out of interest, what caused you to start looking around in there?I am going to give a talk about Rails internals in the next Conferencia Rails Hispana[*]. It covers booting, class loading/ reloading, and request flow. The talk is mainly a code walkthrough so I try to understand each bit of code that goes to the slides (at least as much as I can :-). In addition, I like reading Rails source code. You know, you understand better the tool you use, you learn more Ruby as a side- effect, .... Best regards, -- fxn [*] http://www.conferenciarails.org/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to rubyonrails-core@googlegroups.com To unsubscribe from this group, send email to rubyonrails-core-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---