Why?

## 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^^
##############
--
Posted via http://www.ruby-forum.com/\.

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.

···

On Oct 22, 2:50 am, Kyung won Cheon <kdrea...@gmerce.co.kr> wrote:

## 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^^
##############

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

···

--
NP: Die Apokalyptischen Reiter - Wir Hoffen
Jabber: sepp2k@jabber.org
ICQ: 205544826

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.

···

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.