# Alias problem

**URL:** <https://www.ruby-forum.com/t/alias-problem/121825>\
**Category:** Ruby\
**Created:** [December 1, 2007, 12:41pm UTC](https://www.ruby-forum.com/t/alias-problem/121825 "2007-12-01T12:41:13Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 1, 2007, 12:41pm UTC](https://www.ruby-forum.com/t/alias-problem/121825/1 "2007-12-01T12:41:13Z")

</div>

is there any idea to change public definition to private definition by  
using alias or some others…

---

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 1, 2007, 3:27pm UTC](https://www.ruby-forum.com/t/alias-problem/121825/2 "2007-12-01T15:27:12Z")

</div>

On Dec 1, 4:41 am, Pokkai D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> is there any idea to change public definition to private definition by  
> using alias or some others…

## Slim2:~ phrogz$ qri private

## Module#private private =\> self private(symbol, …) =\> self

```
 With no arguments, sets the default visibility for subsequently
 defined methods to private. With arguments, sets the named

```

methods  
to have private visibility.

```
    module Mod
      def a() end
      def b() end
      private
      def c() end
      private :a
    end
    Mod.private_instance_methods #=> ["a", "c"]

```

Please RTFM in the future 🙂

---

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 2, 2007, 6:20am UTC](https://www.ruby-forum.com/t/alias-problem/121825/3 "2007-12-02T06:20:10Z")

</div>

Gavin K. wrote:

> On Dec 1, 4:41 am, Pokkai D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:  
> Slim2:~ phrogz$ ri private

hey please understand my question correctly  
that is ,  
change public definition(public method) to private definition(private  
method) by  
using some ideas…

## i want like this (ofcourse below is wrong)

## class Cls1 def view puts “from view” end def self.pp alias :private view :public view end end c1=Cls1.new c1.view -----\>from view Cls1.pp c1.view -----\>undefined method `view’ for #Cls1:0xb7daa8b0 (NoMethodError)

---

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 2, 2007, 1:36pm UTC](https://www.ruby-forum.com/t/alias-problem/121825/4 "2007-12-02T13:36:19Z")

</div>

On Dec 2, 2007, at 12:20 AM, Pokkai D. wrote:

> i want like this (ofcourse below is wrong)  
> c1.view -----\>from view  
> Cls1.pp  
> c1.view -----\>undefined method `view’ for #Cls1:0xb7daa8b0  
> (NoMethodError)

I don’t believe you can do what I think you want with ‘alias’. Maybe  
the following will work for you.

`
class Cls1
    def view
       puts "from view"
    end
end
c1 = Cls1.new
c1.view
class Cls1
private :view
end
c1.view
` from view NoMethodError: private method ‘view’ called for #\<Cls1:0x80e10at top level in untitled document at line 14

Regards, Morton

---

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 2, 2007, 3:38pm UTC](https://www.ruby-forum.com/t/alias-problem/121825/5 "2007-12-02T15:38:38Z")

</div>

Morton G. wrote:

> Regards, Morton

thats what i want .

thank you

---

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 2, 2007, 3:43pm UTC](https://www.ruby-forum.com/t/alias-problem/121825/6 "2007-12-02T15:43:22Z")

</div>

Morton G. wrote:

> On Dec 2, 2007, at 12:20 AM, Pokkai D. wrote:
> 
> > i want like this (ofcourse below is wrong)  
> > c1.view -----\>from view  
> > Cls1.pp  
> > c1.view -----\>undefined method `view’ for #Cls1:0xb7daa8b0  
> > (NoMethodError)
> 
> I don’t believe you can do what I think you want with ‘alias’. Maybe  
> the following will work for you.
> 
> `
> class Cls1
> def view
> puts "from view"
> end
> end
> c1 = Cls1.new
> c1.view
> class Cls1
> private :view
> end
> c1.view
> ` from view NoMethodError: private method ï¿½viewï¿½ called for #\<Cls1:0x80e10at top level in untitled document at line 14
> 
> Regards, Morton

actualluy all ruby classes are not closed (we can add anything at any  
time)  
like as above

so how to close a ruby class ?

i thing freeze is used to protect modification for object.  
like that what is used to protect modification for class ?

---

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 2, 2007, 3:49pm UTC](https://www.ruby-forum.com/t/alias-problem/121825/7 "2007-12-02T15:49:49Z")

</div>

Pokkai D. wrote:

> i thing freeze is used to protect modification for object.  
> like that what is used to protect modification for class ?

Classes are objects, too. SomeClass.freeze works just fine.

> > String.freeze  
> > =\> String
> 
> > class String; def bla() end end  
> > TypeError: can’t modify frozen class

See?

HTH,  
Sebastian

---

<div class="post-metadata">

**Author:** ![mokkai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c2a13f/32.png) [@mokkai](https://www.ruby-forum.com/u/mokkai)\
**Post date:** [December 3, 2007, 9:46pm UTC](https://www.ruby-forum.com/t/alias-problem/121825/8 "2007-12-03T21:46:03Z")

</div>

Morton G. wrote:

> On Dec 2, 2007, at 12:20 AM, Pokkai D. wrote:

You could also do something similar to to Morton’s solution, but on the  
metaclass. This would me that you would only make that method private  
for the specific instance of the object you’re currently working with.  
You could also do it from an instance method (like in your example). Is  
this what you were looking for?

class Stuff  
def metaclass  
class \<\< self; self; end  
end

def my\_method  
puts “hi from method!”  
end

def pp  
metaclass.instance\_eval do  
private :my\_method  
end  
end  
end

s = Stuff.new  
s.my\_method  
s.pp  
s.my\_method
