# Method names and alias

**URL:** <https://www.ruby-forum.com/t/method-names-and-alias/113504>\
**Category:** Ruby\
**Created:** [August 31, 2007, 9:49pm UTC](https://www.ruby-forum.com/t/method-names-and-alias/113504 "2007-08-31T21:49:33Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![darren\_kirby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ed8c4c/32.png) [@darren\_kirby](https://www.ruby-forum.com/u/darren_kirby)\
**Post date:** [August 31, 2007, 9:49pm UTC](https://www.ruby-forum.com/t/method-names-and-alias/113504/1 "2007-08-31T21:49:33Z")

</div>

Hello all,

In Unix, you can create a symlink to an executable, and have the program  
behave differently depending on how it was called by testing argv[0]. I  
would  
like to do something similar with Ruby methods using alias.

I have many methods which come in pairs, a version each for signed and  
unsigned numbers. These methods differ by only one line, eg:

def load\_byte(destination, base\_address, offset)  
\<snip 15 lines\>  
@registers.gen[destination] = bitstring\_to\_int(byte)  
true  
end

def load\_byte\_unsigned(destination, base\_address, offset)  
\<snip 15 lines\>  
@registers.gen[destination] = bitstring\_to\_int(byte, signed=false)  
true  
end

My code would be considerably DRYer if I could make ‘load\_byte\_unsigned’  
an  
alias to ‘load\_byte’, and have the method inspect the name it was called  
as  
to decide if it should run ‘bitstring\_to\_int(byte, signed=false)’ or  
not.

Is there a way to do this?

If not, I suppose my best bet is to move the snipped 15 lines to  
a ‘load\_byte\_common’ method and make ‘load\_byte’ and  
‘load\_byte\_unsigned’  
thin wrappers around it?

Thanks for consideration,  
-d

---

<div class="post-metadata">

**Author:** ![darren\_kirby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ed8c4c/32.png) [@darren\_kirby](https://www.ruby-forum.com/u/darren_kirby)\
**Post date:** [September 1, 2007, 6:12am UTC](https://www.ruby-forum.com/t/method-names-and-alias/113504/2 "2007-09-01T06:12:09Z")

</div>

On 9/1/07, darren kirby [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> \<snip 15 lines\>  
> My code would be considerably DRYer if I could make ‘load\_byte\_unsigned’ an  
> alias to ‘load\_byte’, and have the method inspect the name it was called as  
> z\> to decide if it should run ‘bitstring\_to\_int(byte, signed=false)’ or  
> not.

Well this is your problem, “have the method inspect the name it was  
called as”. I guess if you really want to DRY them up ( although the  
other approach you suggested sounds good enough), you can use  
method\_missing and capture method names and do stuff based on that.

Also, if there is a way to determine method that you intend to call  
based on argument data type, then you can inspect your arguments and  
do DRY stuff. But i guess you would have already thought out that  
possibility. Anyways…

> darren kirby :: Part of the problem since 1976 :: [http://badcomputer.org](http://badcomputer.org)  
> “…the number of UNIX installations has grown to 10, with more expected…”
> 
> - Dennis Ritchie and Ken Thompson, June 1972

–  
Let them talk of their oriental summer climes of everlasting  
conservatories; give me the privilege of making my own summer with my  
own coals.

[http://blog.gnufied.org](http://blog.gnufied.org)

---

<div class="post-metadata">

**Author:** ![darren\_kirby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ed8c4c/32.png) [@darren\_kirby](https://www.ruby-forum.com/u/darren_kirby)\
**Post date:** [September 1, 2007, 7:16am UTC](https://www.ruby-forum.com/t/method-names-and-alias/113504/3 "2007-09-01T07:16:13Z")

</div>

On Aug 31, 1:47 pm, darren kirby [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> My code would be considerably DRYer if I could make ‘load\_byte\_unsigned’ an  
> alias to ‘load\_byte’, and have the method inspect the name it was called as  
> to decide if it should run ‘bitstring\_to\_int(byte, signed=false)’ or not.
> 
> Is there a way to do this?

I can’t offer you a way to do this, but:

> If not, I suppose my best bet is to move the snipped 15 lines to  
> a ‘load\_byte\_common’ method and make ‘load\_byte’ and ‘load\_byte\_unsigned’  
> thin wrappers around it?

I’d personally do something like:

def load\_byte( byte, unsigned=false )  
#…your code here…  
end

def load\_byte\_unsigned( byte )  
load\_byte( byte, true )  
end

A (private?) utility function is certainly possible, but not the way  
I’d go, or needed.

---

<div class="post-metadata">

**Author:** ![darren\_kirby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ed8c4c/32.png) [@darren\_kirby](https://www.ruby-forum.com/u/darren_kirby)\
**Post date:** [September 1, 2007, 9:12am UTC](https://www.ruby-forum.com/t/method-names-and-alias/113504/4 "2007-09-01T09:12:19Z")

</div>

From: darren kirby [[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)]

# def load\_byte(destination, base\_address, offset)

# \<snip 15 lines\>

# @registers.gen[destination] = bitstring\_to\_int(byte)

# true

# end

# 

# def load\_byte\_unsigned(destination, base\_address, offset)

# \<snip 15 lines\>

# @registers.gen[destination] = bitstring\_to\_int(byte, signed=false)

# true

# end

def load\_byte(destination, base\_address, offset, signed=true)  
\<snip 15 lines\>  
@registers.gen[destination] = bitstring\_to\_int(byte,signed)  
true  
end

load\_byte(destination, base\_address, offset) #signed  
load\_byte(destination, base\_address, offset, signed=false) #unsigned

---

<div class="post-metadata">

**Author:** ![darren\_kirby](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ed8c4c/32.png) [@darren\_kirby](https://www.ruby-forum.com/u/darren_kirby)\
**Post date:** [September 1, 2007, 8:00pm UTC](https://www.ruby-forum.com/t/method-names-and-alias/113504/5 "2007-09-01T20:00:37Z")

</div>

quoth the Phrogz:

> > a ‘load\_byte\_common’ method and make ‘load\_byte’ and ‘load\_byte\_unsigned’  
> > end  
> > Thanks Phrogz,

This gives me some ideas on how to clean up the code a bit.

@Hemant:

I guess I was hoping there may have been some "if self.name ==  
“load\_byte”  
magic that I could have used.

@Pena:

Thanks, but I cannot change the name of the method, that is, there must  
be an  
unsigned counterpart, as I am writing methods which emulate Mips32 ISA  
and I  
want my methods to match the ops…the real methos names are 'lb, and  
‘lbu’  
so…

-d
