Hi
I'm fairly new to this "meta-programming" thing, so excuse me if I get
my terminology wrong. Is there any way of getting access to the
exisiting context when using class << obj or otherwise creating a
singleton method?
For example of what I mean - I have a method that returns a Proc:
def foo()
local_var = "Bar"
Proc.new { local_var }
end
x = foo()
x.call --> returns "Bar", 'remembering' the local context
and I want to something similar with methods defined using class <<
obj:
class MyObject
end
def foo(my_object_instance)
local_var = "Bar"
class << my_object_instance
define_method(:a_method) { local_var }
end
end
o = MyObject.new
foo(o)
o.a_method --> throws an error, complaining about missing local
variable
If I just wanted to assign this method to the class then I think I
could do the following in foo:
my_object_instance.class.send(:define_method, :a_method) { local_var }
But I want to define a singleton method, and I don't think you can get
access to an object instance's virtual class in a similar way?
Any help with this much appreciated,
TIA
Roland
Hi --
Hi
I'm fairly new to this "meta-programming" thing, so excuse me if I get
my terminology wrong. Is there any way of getting access to the
exisiting context when using class << obj or otherwise creating a
singleton method?
Yes:
sclass = (class << obj; self; end)
sclass.class_eval do
define_method ...
end
That will keep you in the local scope you started in.
Hopefully there will be a method in Ruby 1.9/2.0 that will let you
grab an object's singleton class, so you could do:
obj.singleton_class.class_eval # etc.
David
···
On Sun, 7 Jan 2007, Roland Swingler wrote:
--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black\)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf\)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)
Great!
Yes:
Thanks for the (very speedy) response.
Hopefully there will be a method in Ruby 1.9/2.0 that will let you
grab an object's singleton class, so you could do:
obj.singleton_class.class_eval # etc.
I guess you can have this in ruby 1.8 by doing
class Object
def singleton_class
class << self
self
end
end
end
Some code that I've seen around is now much clearer... thanks again.
Cheers,
Roland
Hi --
Great!
Yes:
Thanks for the (very speedy) response.
Hopefully there will be a method in Ruby 1.9/2.0 that will let you
grab an object's singleton class, so you could do:
obj.singleton_class.class_eval # etc.
I guess you can have this in ruby 1.8 by doing
class Object
def singleton_class
class << self
self
end
end
end
Yes, many of us have had occasion to write exactly that
Some code that I've seen around is now much clearer... thanks again.
Glad to help!
David
···
On Sun, 7 Jan 2007, Roland Swingler wrote:
--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black\)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf\)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)