# Preferred way to overwrite an object method?

**URL:** <https://www.ruby-forum.com/t/preferred-way-to-overwrite-an-object-method/122336>\
**Category:** Ruby\
**Created:** [December 6, 2007, 7:01pm UTC](https://www.ruby-forum.com/t/preferred-way-to-overwrite-an-object-method/122336 "2007-12-06T19:01:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![blogger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e5b9ba/32.png) [@blogger](https://www.ruby-forum.com/u/blogger)\
**Post date:** [December 6, 2007, 7:01pm UTC](https://www.ruby-forum.com/t/preferred-way-to-overwrite-an-object-method/122336/1 "2007-12-06T19:01:35Z")

</div>

I have an app with source code I really don’t want to touch, which has  
an object method I want to be able to overwrite in a certain task.  
(No need to restore the function.) My current technique is as  
follows:

In the application:  
class C  
def m  
puts “barf”  
end  
end

In my module file:  
module M  
def self.included(mod)  
mod.module\_eval \<\<-EOF  
def m  
puts “c001c0de”  
end  
EOF  
end  
end

In the rake file:  
C:send(:include, M)

Now I REALLY don’t like module\_eval(string). Is there a preferred  
method to achieve this result?

---

<div class="post-metadata">

**Author:** ![blogger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e5b9ba/32.png) [@blogger](https://www.ruby-forum.com/u/blogger)\
**Post date:** [December 6, 2007, 7:36pm UTC](https://www.ruby-forum.com/t/preferred-way-to-overwrite-an-object-method/122336/2 "2007-12-06T19:36:12Z")

</div>

On Dec 6, 2007 7:00 PM, blogger [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> end  
> end
> 
> In the rake file:  
> C:send(:include, M)
> 
> Now I REALLY don’t like module\_eval(string). Is there a preferred  
> method to achieve this result?

module M  
def self.included target  
target.send :remove\_method :m  
end  
def m; 42 end  
end

Do you like this better?  
You need rescue code in case m is not defined in C BTW

Cheers  
Robert

–

[http://ruby-smalltalk.blogspot.com/](http://ruby-smalltalk.blogspot.com/)

* * *

All truth passes through three stages. First, it is ridiculed. Second,  
it is violently opposed. Third, it is accepted as being self-evident.  
Schopenhauer (attr.)

---

<div class="post-metadata">

**Author:** ![blogger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e5b9ba/32.png) [@blogger](https://www.ruby-forum.com/u/blogger)\
**Post date:** [December 6, 2007, 9:05pm UTC](https://www.ruby-forum.com/t/preferred-way-to-overwrite-an-object-method/122336/3 "2007-12-06T21:05:55Z")

</div>

Ahh, much better. I had missed remove\_method. In my case, there is  
no possibility of the method not being defined, but if there were, a  
rescue nil would do nicely.
