Forum: Ruby Why ??

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A0f8691203f9ba1151301eaf567dedd4?d=identicon&s=25 Kyung won C. (kdream95)
on 2008-10-22 08:52
## 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^^
##############
C8651ca28887bad23ff86bddaca25a9b?d=identicon&s=25 Thomas S. (7rans)
on 2008-10-22 13:10
(Received via mailing list)
On Oct 22, 2:50 am, Kyung won Cheon <kdrea...@gmerce.co.kr> 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.
Sebastian Hungerecker (Guest)
on 2008-10-22 13:28
(Received via mailing list)
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
C8651ca28887bad23ff86bddaca25a9b?d=identicon&s=25 Thomas S. (7rans)
on 2008-10-22 21:08
(Received via mailing list)
On Oct 22, 7:25 am, Sebastian Hungerecker <sep...@googlemail.com>
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.
This topic is locked and can not be replied to.