On May 14, 2:34 ¨Βν¬ ΚανεΘαξσ Όσμυσθ®®®ΐηναιμ®γονΎ χςοτεΊ > Hey folks, > > I have a module which I'm using to contain a lot of strings that my > objects print out. I want to use a module because it seems better to me > to put the data in a separate location than my object implementation, so > I can more easily see the logic of my object. > > My object builds a set of text files. Each of these text files has > sections within them that are customised based upon a string handed in > to the object, such that: > > bill = textFile.new("bill") > > bill.header #returns "This is the header for bill" > bill.comment #returns "Bill is implemented with the following options:" > followed by the unique options for bill. > > ted = textFile.new("ted") > ted.header #returns "This is the header for ted" > ted.comment #returns "ted is implemented with the following options:" > followed by the unique options for ted. > > and so on. > > Now, what I want is to have my Textfile class include a data module. The > data module contains all of the strings This is the header for > #{variable}", "#{variable} is implemented with the following options:". > > As such, I need to pass the argument to the textfile's new method back > up into the module that the textfile includes. > > I guess the question is, is there a way to reference a variable from a > class in a module that the class will include? At the instance level yes, and the module level no (though you can work around). Instance level: module M def m @x end end class X include M def initialize @x = 10 end end X.new.m #=> 10 Class level (trick): module M def self.m @x ||= 20 end end class X include M def self.m anc = ancestors.find{ |a| a.respond_to?(:m) } anc.m if anc end end trans.