# Using send to define object methods

**URL:** <https://www.ruby-forum.com/t/using-send-to-define-object-methods/195172>\
**Category:** Ruby\
**Created:** [September 18, 2010, 8:01am UTC](https://www.ruby-forum.com/t/using-send-to-define-object-methods/195172 "2010-09-18T08:01:57Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dgm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/df788c/32.png) [@dgm](https://www.ruby-forum.com/u/dgm)\
**Post date:** [September 18, 2010, 8:01am UTC](https://www.ruby-forum.com/t/using-send-to-define-object-methods/195172/1 "2010-09-18T08:01:57Z")

</div>

Hello

If I want to add a method to a class, I can use send as shown below. Is  
there a similar way to use send to add a method to an object?

class MyClass  
end

MyClass.send(:define\_method, :poof) {‘I say poof!’}

x = MyClass.new  
x.poof # =\> “I say poof!”

I can define an object method as follows:

def x.object\_poof  
‘I say object\_poof’  
end

x.object\_poof # =\> “I say object\_poof”

I would like to use send to define object methods but I have not figured  
out how.

Thanks  
Dave Miller

---

<div class="post-metadata">

**Author:** ![dgm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/df788c/32.png) [@dgm](https://www.ruby-forum.com/u/dgm)\
**Post date:** [September 18, 2010, 8:40am UTC](https://www.ruby-forum.com/t/using-send-to-define-object-methods/195172/2 "2010-09-18T08:40:17Z")

</div>

Hello,

If you execute your script on Ruby 1.9, you can use  
Object#define\_singleton\_method to add a method to an object.

# — begin: example —

class MyClass  
end  
MyClass.send(:define\_method, :poof) {‘I say poof!’}  
x = MyClass.new  
y = MyClass.new

x.define\_singleton\_method( :poof\_singleton ) { “Here is in a singleton  
method.” }  
x.poof\_singleton #=\> “Here is in a singleton method.”  
y.poof\_singleton #=\> NoMethodError

# — end: example —

The method Object#define\_singleton\_method is able to be used on Ruby  
1.9, but I couldn’t find out its doc…

2010/9/18 David M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![dgm](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/df788c/32.png) [@dgm](https://www.ruby-forum.com/u/dgm)\
**Post date:** [September 18, 2010, 10:47am UTC](https://www.ruby-forum.com/t/using-send-to-define-object-methods/195172/3 "2010-09-18T10:47:16Z")

</div>

David M. wrote:

> I would like to use send to define object methods but I have not figured  
> out how.

There is a magic incantation to get at the singleton class:

object\_poof = Object.new  
class \<\<object\_poof; self; end.send(:define\_method, :poof) {‘I say  
poof!’}  
object\_poof.poof

I would personally use .class\_eval { define\_method … } instead of  
.send(:define\_method …) but that’s just preference.
