From: Victor Shepelev Date: 2006-06-06T00:52:15+09:00 Subject: Q about instance_eval Hi all. I tried some strange kind of things. class DomNode attr_accessor :handler def event_handler=(str) @handler = eval(str) end def on_event(*arg); @handler[*arg] end end #usage node.event_handler = 'self["some-attr"] = "some-value"' node.send_some_event assert_equal "some-value", self["some-attr"] OK. Then. class DomNode def clone other = DomNode.new #some initializing, copying of attributes, etc. other.handler = @handler #HERE is the problem! end end #show the problem: node.event_handler = 'self["some-attr"] = "some-value"' cloned = node.clone cloned.send_some_event assert_equal "some-value", self["some-attr"] #failed! Event handler has been evaluated in context of original node; so "self" is pointing to original node, not to cloned. So, I need method to "rebind" proc to clone, but only if it "binded" to self. How it can be done? For some reason, I can't do def on_event(*arg) self.instance_eval(&@handler) end What can be done instead this? Thanks. V.