in irb
self
=> main
def why?
end
=> nil
self.why?
=> nil
in test.rb
p self # => main
def why?
end
self.why? # private method ‘why?’ called for main:Object
(NoMethodError)
Anyway, one more…
in test2.rb
def why?
end
class A
end
p A.private_method_defined?(:why?) # true
How is ‘why?’ inherited???
The ‘main’ is a instance of Object but it’s not a Object?
I understand if …
class Object
private
def why?
end
end
##############
Help Me^^
##############
On Oct 22, 2:50 am, Kyung won Cheon [email protected] wrote:
=> nil
How is ‘why?’ inherited???
Help Me^^
##############
The toplevel object (aka ‘main’) delegates some module-equivalent
methods to Object class. So when you say
def why?
end
What actually happens is:
class Object
def why?
end
private :why?
end
Not all module methods are delegated, try using define_method(:why?)
at the toplevel instead and it will bomb.
T.
P.S. Personally, I find the whole setup rather half-baked, and have
continually advocated for the replacement of the current toplevel
object with a self extended module.
Trans wrote:
The toplevel object (aka ‘main’) delegates some module-equivalent
methods to Object class.
As far as I’m aware it “delegates” only alias, undef, def, module and
class.
So it only delegates keywords, not methods. Which is, I assume, why def
works
and define_method (which is a method) does not.
HTH,
Sebastian
On Oct 22, 7:25 am, Sebastian H. [email protected]
wrote:
Trans wrote:
The toplevel object (aka ‘main’) delegates some module-equivalent
methods to Object class.
As far as I’m aware it “delegates” only alias, undef, def, module and class.
So it only delegates keywords, not methods. Which is, I assume, why def works
and define_method (which is a method) does not.
Good point. I never really looked at like that b/c I tend to think of
keywords as syntax sugar for real methods.
class → Class.new
def → define_method
alias → alias_method
etc.
Conditionals are an exception, of course.
But it sort of begs the question, why does it support the one and not
the other?
T.