using send to define object methods

D

David Miller

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
 
Y

Y. NOBUOKA

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 =3D MyClass.new
y =3D MyClass.new

x.define_singleton_method( :poof_singleton ) { "Here is in a singleton
method." }
x.poof_singleton #=3D> "Here is in a singleton method."
y.poof_singleton #=3D> 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 Miller said:
Hello

If I want to add a method to a class, I can use send as shown below. =A0I= s
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 =3D MyClass.new
x.poof # =3D> "I say poof!"


I can define an object method as follows:

def x.object_poof
=A0'I say object_poof'
end

x.object_poof # =3D> "I say object_poof"

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

Thanks
Dave Miller

--=20
NOBUOKA Yuya
e-mail: (e-mail address removed)
 
B

Brian Candler

David said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top