Public_methods on a class

Hi

is anyone able to to explain to me why :foo is in the array below?

My understanding of the docs would suggest that calling
public_methods(false) should only include methods defined on the class
itself?

class A
  def self.foo
    "FOO"
  end
end
class B < A
end
p B.public_methods(false)

=> [:foo, :allocate, :new, :superclass]

(Eval - latest in tech, AI, software, Networking, Marketing & more)

Thanks

Steve

···

--
Posted via http://www.ruby-forum.com/\.

In the defination of class B, the part “< A" tells ruby that class B
is inheriting from class A.

When class B inherits from class A, all the properties(methods,
instance and class variables) in class A are available to class B

Ex:

class A
   def self.foo
     "FOO"
   end
end
  class B < A

  end

class C < B

end

C.public_methods(false)

[:foo, :allocate, :new, :superclass]

When we inherit class B in C will result the same...

Thanks,
Ganesh Kaliannan

···

On Fri, Aug 2, 2013 at 4:21 AM, Steve S. <lists@ruby-forum.com> wrote:

Hi

is anyone able to to explain to me why :foo is in the array below?

My understanding of the docs would suggest that calling
public_methods(false) should only include methods defined on the class
itself?

class A
  def self.foo
    "FOO"
  end
end
class B < A
end
p B.public_methods(false)

=> [:foo, :allocate, :new, :superclass]

(Eval - latest in tech, AI, software, Networking, Marketing & more)

Thanks

Steve

--
Posted via http://www.ruby-forum.com/\.

The part I don't understand is behaviour of public_methods.

From the docs:

"
If the all parameter is set to false, only those methods in the receiver
will be listed.
"

So, from my understanding, in my example, the Inheritance chain for A
is:

"A < Object"

And B therefore is:

"B < A < Object"

What I don't understand is why A.public_methods(false) excludes the
public_methods defined on Object, but B.public_methods(false) INCLUDES
the public methods defined on A.

Thanks

···

--
Posted via http://www.ruby-forum.com/.

It seems that A.public_methods(false) does include all the public
methods.

···

--
Posted via http://www.ruby-forum.com/.