Basic ruby Question

Hello,

I didn't understand the following concept.

*class Universe

private
  def self.private_method
    p "=========Hello world======="
  end

end

Universe.**private_method** => "=========Hello world======="

···

*

How come I get the o/p ( *"=========Hello world=======" * ) as I have
declared that method as private.

Thanks in advance
Deepak Gole (DG)

Hi All,

But it was working in this way.

class Universe
def self.private_method
    p "=========Hello world======="
  end
end
u=Universe.new
u.private_method

# => private.rb:7: undefined method `private_method' for
#<Universe:0x2b66aa0> (NoMethodError)

what is the Difference betweeen these two types?

u=Universe.new
u.private_method && Universe.private_method

Regards,
P.Raveendran

···

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

The private method only makes instance methods private, not class methods.
This means the reason you can call Universe.private_method is that, despite
its name, the method is still public. To make a class method private, you can
use the Module#private_class_method method:

class Universe

  def self.private_method
    p "Hello world"
  end

  private_class_method :private_method

end

Universe.private_method

=> private method `private_method' called for Universe:Class (NoMethodError)

I hope this helps

Stefano

···

On Friday 04 July 2008, Deepak Gole wrote:

Hello,

I didn't understand the following concept.

*class Universe

private
  def self.private_method
    p "=========Hello world======="
  end

end

Universe.**private_method** => "=========Hello world======="
*

How come I get the o/p ( *"=========Hello world=======" * ) as I have
declared that method as private.

Thanks in advance
Deepak Gole (DG)

Raveendran Jazzez wrote:

But it was working in this way.

class Universe
def self.private_method
    p "=========Hello world======="
  end
end
u=Universe.new
u.private_method

# => private.rb:7: undefined method `private_method' for
#<Universe:0x2b66aa0> (NoMethodError)

Your second example, does not work either. You tried to call a
class-method on an object.

I don't know how useful a private class-method could be. it doesn't make
to much sense for me.

i'm pretty sure, all you want is a simple instance-method: leave out the
"self." at the methods declaration:

private
  def private_method
    p "something"
  end

what is the Difference betweeen these two types?

u=Universe.new
u.private_method && Universe.private_method

for the difference between instance and class-methods use google on
there terms. the first explanation i found, should be sufficient:
http://www.juixe.com/techknow/index.php/2007/01/22/ruby-class-tutorial/

···

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

Hello stefano,

Thanks for your explanation.

···

On Fri, Jul 4, 2008 at 12:37 PM, Stefano Crocco <stefano.crocco@alice.it> wrote:

On Friday 04 July 2008, Deepak Gole wrote:
> Hello,
>
> I didn't understand the following concept.
>
> *class Universe
>
> private
> def self.private_method
> p "=========Hello world======="
> end
>
> end
>
> Universe.**private_method** => "=========Hello world======="
> *
>
> How come I get the o/p ( *"=========Hello world=======" * ) as I have
> declared that method as private.
>
> Thanks in advance
> Deepak Gole (DG)

The private method only makes instance methods private, not class methods.
This means the reason you can call Universe.private_method is that, despite
its name, the method is still public. To make a class method private, you
can
use the Module#private_class_method method:

class Universe

def self.private_method
   p "Hello world"
end

  private_class_method :private_method

end

Universe.private_method

=> private method `private_method' called for Universe:Class
(NoMethodError)

I hope this helps

Stefano