Private class methods- functionality or shortcoming?

I just switched to Ruby and came across it.
If we have to make a class method private then we should write it as:

class Abc
   
    class<<self
        private
        def fun
            p "hello"
        end
    end
   
end

But if we write as:

class Abc
   
    private
    def self.fun
        p "hello"
    end

end

then the class method is not private but behaves as public.

So, is it a carefully designed functionality? If so, then what is the thinking behind it?
OR any other reasons behind it?
Somebody told me that ruby encourages to define class methods the first way.
But I think that if you are giving more than one methods to do a thing, then all should function the same way.

Thanks and Regards,
Amit

The Module#private method only works for instance methods, not for class
method. To make a class method private, you should use the
Module#private_class_method method. Note that, unlike private,
private_class_method only accepts one argument, so that you want to make more
than one method private, you should call it multiple times.

So, the correct method to make the method private using the second form is:

class Abc

def self.fun
  p "hello"
end
private_class_method :fun

end

I hope this helps

Stefano

···

On Monday 09 June 2008, amit saxena wrote:

I just switched to Ruby and came across it.
If we have to make a class method private then we should write it as:

class Abc
   
    class<<self
        private
        def fun
            p "hello"
        end
    end
   
end

But if we write as:

class Abc
   
    private
    def self.fun
        p "hello"
    end

end

then the class method is not private but behaves as public.

So, is it a carefully designed functionality? If so, then what is the
thinking behind it? OR any other reasons behind it?
Somebody told me that ruby encourages to define class methods the first
way. But I think that if you are giving more than one methods to do a
thing, then all should function the same way.

Thanks and Regards,
Amit

"> The Module#private method only works for instance methods,

not for class
method."

My question is, why is it so? What's the advantage in it?

Amit

From: Stefano Crocco <stefano.crocco@alice.it>
Subject: Re: private class methods- functionality or shortcoming?
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Date: Monday, June 9, 2008, 7:39 PM
> I just switched to Ruby and came across it.
> If we have to make a class method private then we
should write it as:
>

class Abc
   
    class<<self
        private
        def fun
            p "hello"
        end
    end
   
end

>But if we write as:

class Abc
   
    private
    def self.fun
        p "hello"
    end

end

···

--- On Mon, 6/9/08, Stefano Crocco <stefano.crocco@alice.it> wrote:

On Monday 09 June 2008, amit saxena wrote:

>
> then the class method is not private but behaves as
public.
>
> So, is it a carefully designed functionality? If so,
then what is the
> thinking behind it? OR any other reasons behind it?
> Somebody told me that ruby encourages to define class
methods the first
> way. But I think that if you are giving more than one
methods to do a
> thing, then all should function the same way.
>
> Thanks and Regards,
> Amit

The Module#private method only works for instance methods,
not for class
method. To make a class method private, you should use the
Module#private_class_method method. Note that, unlike
private,
private_class_method only accepts one argument, so that you
want to make more
than one method private, you should call it multiple times.

So, the correct method to make the method private using the
second form is:

class Abc

def self.fun
  p "hello"
end
private_class_method :fun

end

I hope this helps

Stefano

HELP...!!!

···

--- On Tue, 6/10/08, amit saxena <amit83.saxena@yahoo.com> wrote:

From: amit saxena <amit83.saxena@yahoo.com>
Subject: private class methods- functionality or shortcoming?
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Date: Tuesday, June 10, 2008, 1:40 PM
"> The Module#private method only works for instance
methods,
> not for class
> method."

My question is, why is it designed so? What's the advantage in
it?

Amit

--- On Mon, 6/9/08, Stefano Crocco > <stefano.crocco@alice.it> wrote:

> From: Stefano Crocco <stefano.crocco@alice.it>
> Subject: Re: private class methods- functionality or
shortcoming?
> To: "ruby-talk ML"
<ruby-talk@ruby-lang.org>
> Date: Monday, June 9, 2008, 7:39 PM
> On Monday 09 June 2008, amit saxena wrote:
> > I just switched to Ruby and came across it.
> > If we have to make a class method private then we
> should write it as:
> >
class Abc
   
    class<<self
        private
        def fun
            p "hello"
        end
    end
   
end

> >But if we write as:

class Abc
   
    private
    def self.fun
        p "hello"
    end

end

> >
> > then the class method is not private but behaves
as
> public.
> >
> > So, is it a carefully designed functionality? If
so,
> then what is the
> > thinking behind it? OR any other reasons behind
it?
> > Somebody told me that ruby encourages to define
class
> methods the first
> > way. But I think that if you are giving more than
one
> methods to do a
> > thing, then all should function the same way.
> >
> > Thanks and Regards,
> > Amit
>
> The Module#private method only works for instance
methods,
> not for class
> method. To make a class method private, you should use
the
> Module#private_class_method method. Note that, unlike
> private,
> private_class_method only accepts one argument, so
that you
> want to make more
> than one method private, you should call it multiple
times.
>
> So, the correct method to make the method private
using the
> second form is:
>
> class Abc
>
> def self.fun
> p "hello"
> end
> private_class_method :fun
>
> end
>
> I hope this helps
>
> Stefano