# Class#aliases?

**URL:** <https://www.ruby-forum.com/t/class-aliases/116919>\
**Category:** Ruby\
**Created:** [October 11, 2007, 6:59am UTC](https://www.ruby-forum.com/t/class-aliases/116919 "2007-10-11T06:59:37Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 6:59am UTC](https://www.ruby-forum.com/t/class-aliases/116919/1 "2007-10-11T06:59:37Z")

</div>

Does this method exist? I think that it doesn’t, but I just thought  
I’d make sure.

–  
Giles B.

Blog: [http://gilesbowkett.blogspot.com](http://gilesbowkett.blogspot.com)  
Portfolio: [http://www.gilesgoatboy.org](http://www.gilesgoatboy.org)  
Tumblelog: [http://giles.tumblr.com/](http://giles.tumblr.com/)

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 7:37am UTC](https://www.ruby-forum.com/t/class-aliases/116919/2 "2007-10-11T07:37:29Z")

</div>

Giles B. wrote:

> Does this method exist? I think that it doesn’t, but I just thought  
> I’d make sure.
> 
> –  
> Giles B.
> 
> Blog: [http://gilesbowkett.blogspot.com](http://gilesbowkett.blogspot.com)  
> Portfolio: [http://www.gilesgoatboy.org](http://www.gilesgoatboy.org)  
> Tumblelog: [http://giles.tumblr.com/](http://giles.tumblr.com/)

It is not necessary, because Classe are objects…

irb(main):001:0\> class Otto  
irb(main):002:1\> def hi  
irb(main):003:2\> puts “Hi!”  
irb(main):004:2\> end  
irb(main):005:1\> end  
=\> nil  
irb(main):006:0\> Hugo = Otto  
=\> Otto  
irb(main):007:0\> Otto.new.hi  
Hi!  
=\> nil  
irb(main):008:0\> Hugo.new.hi  
Hi!  
=\> nil

Wolfgang NÃ¡dasi-Donner

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 9:46am UTC](https://www.ruby-forum.com/t/class-aliases/116919/3 "2007-10-11T09:46:07Z")

</div>

Giles B. wrote:

> Does this method exist? I think that it doesn’t, but I just thought  
> I’d make sure.
> 
> –  
> Giles B.
> 
> Blog: [http://gilesbowkett.blogspot.com](http://gilesbowkett.blogspot.com)  
> Portfolio: [http://www.gilesgoatboy.org](http://www.gilesgoatboy.org)  
> Tumblelog: [http://giles.tumblr.com/](http://giles.tumblr.com/)

Again - it cannot exist. The syntactic element “alias” cannot be applied  
to local variables, instance variables, class variables and constants -  
because class names are (usually) constants, they can’t have aliases. If  
you use normal assignment to constants for aliasing classes a simple  
method can be defined…

class Class  
def aliases?  
Module.constants.find\_all{|c|self.equal?(const\_get(c))}  
end  
end

Otto = String  
Hugo = String  
p String.aliases? # =\> [“Hugo”, “String”, “Otto”]

Wolfgang NÃ¡dasi-Donner

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 7:40am UTC](https://www.ruby-forum.com/t/class-aliases/116919/4 "2007-10-11T07:40:03Z")

</div>

Quoth Giles B.:

> Does this method exist? I think that it doesn’t, but I just thought  
> I’d make sure.
> 
> –  
> Giles B.
> 
> Blog: [http://gilesbowkett.blogspot.com](http://gilesbowkett.blogspot.com)  
> Portfolio: [http://www.gilesgoatboy.org](http://www.gilesgoatboy.org)  
> Tumblelog: [http://giles.tumblr.com/](http://giles.tumblr.com/)

Irb says no, but I’d guess you’d have already tried that.

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 12:12pm UTC](https://www.ruby-forum.com/t/class-aliases/116919/5 "2007-10-11T12:12:52Z")

</div>

Wolfgang NÃ¡dasi-Donner wrote:

> Giles B. wrote:
> 
> > …

btw - is there a difference between “alias” and “alias\_method” if  
applied to a method name (I don’t mean that I must use Symbols in  
"alias\_method)?

Wolfgang NÃ¡dasi-Donner

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 4:29pm UTC](https://www.ruby-forum.com/t/class-aliases/116919/6 "2007-10-11T16:29:10Z")

</div>

On Oct 10, 9:58 pm, “Giles B.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Does this method exist? I think that it doesn’t, but I just thought  
> I’d make sure.

Do you mean that you’d like a list of all aliases defined in a class,  
similar to #instance\_methods?

T.

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 4:32pm UTC](https://www.ruby-forum.com/t/class-aliases/116919/7 "2007-10-11T16:32:06Z")

</div>

On Oct 11, 2:46 am, “Wolfgang Nádasi-Donner” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> end
> 
> Otto = String  
> Hugo = String  
> p String.aliases? # =\> [“Hugo”, “String”, “Otto”]
> 
> Wolfgang Nádasi-Donner
> 
> –  
> Posted viahttp://www.ruby-forum.com/.

It seems you and I understood the question in two different ways. Only  
Giles can answer this for certain, but I don’t think you’re answering  
the question he asked.

I understood the point of Class#aliases to mean not “Are there any  
other constants out there that are really the same class object, and  
if so, what are they?” but “Are there any methods in this class that  
are aliases for other methods, and if so, what are the connections?”

Giles, please explain.

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 11, 2007, 9:22pm UTC](https://www.ruby-forum.com/t/class-aliases/116919/8 "2007-10-11T21:22:30Z")

</div>

> Giles, please explain.
> 
> –  
> -yossef

I was skimming, and read that as “Giles, please explain yourself.”

Anyway -

> Do you mean that you’d like a list of all aliases defined in a class,  
> similar to #instance\_methods?

Actually no. I was looking at an error message that expected #aliases  
to exist, and I thought it was weird.

> I understood the point of Class#aliases to mean not “Are there any  
> other constants out there that are really the same class object, and  
> if so, what are they?” but “Are there any methods in this class that  
> are aliases for other methods, and if so, what are the connections?”

Nope, it was just a weird error message referencing some internal  
code. But both these interpretations are pretty interesting.

Technically, as I learned from Ryan D., you **can** actually  
“alias” a class, even though you can’t **alias** a class.

> > Monkey = String  
> > =\> String  
> > m = Monkey.new(“asdf”)  
> > =\> “asdf”  
> > m.gsub!(/asdf/, “qwerty”)  
> > =\> “qwerty”

–  
Giles B.

Blog: [http://gilesbowkett.blogspot.com](http://gilesbowkett.blogspot.com)  
Portfolio: [http://www.gilesgoatboy.org](http://www.gilesgoatboy.org)  
Tumblelog: [http://giles.tumblr.com/](http://giles.tumblr.com/)

---

<div class="post-metadata">

**Author:** ![Giles\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/848f3c/32.png) [@Giles\_B](https://www.ruby-forum.com/u/Giles_B)\
**Post date:** [October 18, 2007, 1:22pm UTC](https://www.ruby-forum.com/t/class-aliases/116919/9 "2007-10-18T13:22:13Z")

</div>

Trans wrote:

> On Oct 10, 9:58 pm, “Giles B.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > Does this method exist? I think that it doesn’t, but I just thought  
> > I’d make sure.
> 
> Do you mean that you’d like a list of all aliases defined in a class,  
> similar to #instance\_methods?

If so, I brought this up a while back:

[http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/196740](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/196740)

Ryan D. came up with a rather interesting solution. 🙂

One problem right off the bat, however, is that the Ruby source would  
need to be modified to be more stringent about using true aliases in  
order such a method to be accurate.

Regards,

Dan
