From: konsu Date: 2006-02-08T12:03:22+09:00 Subject: mixing in modules ? hello, given: 1. class C that implements some arbitrary methods 2. a database with code fragments stored as text i create a variable 'var' of class C and then read some code fragments from the database. each fragment i read is evaluated in a dynamic anonymous module, and this module is used to extend 'var': var = C.new .. . . m = Module.new m.module_eval(code_fragment) .. . . var.extend(m) so if a fragment implements some methods that are already defined in C mixing in effectively replaces the original methods with the ones defined in the fragment. the problem: class C defines an instance variable @x: class C def initialize; @x = 'C'; end def to_s; @x; end end i want to override 'to_s' method. but the new implementation that i have in my fragment still needs to refer to @x. so i do this: fragment = "def to_s; foo(@x); end" this works fine. but this does not seem like a good programming style. a module refers to a variable that is defined in the object that this module happens to be mixed in to. can anyone comment on this? basically the problem is to be able to override the behaviour of 'var' at run time as code fragments are read. to give a concrete example of what i am trying to do, suppose you have a database with text fields. each field is represented at run time by class C that can be converted to a string. the basic to_s implementation just outputs the value of the text field. but i want to also store text fields that contain textile markup, or eruby markup or whatever, in other words i want to associate a type with each text field and i want the to_s method to behave differently depending on the type. but for to_s to be able to run it needs to get the value of the text field from C. thanks konstantin