metaprogramming-1-Dynamic Method

?

# cool dynamic method usageclass MyClassdefine_method :my_method do |my_arg|my_arg * 8endendm = MyClass.newp m.my_method 8p m.send(:my_method, 9)# a more complicated exampleputs "============== Example ==============="# Dynamic Example# Dynamic Modelclass MOUSEattr_accessor :price, :info, :c_iddef initialize price, info, c_id@price, @info, @c_id = price, info, c_idendendclass CPUattr_accessor :price, :info, :c_iddef initialize price, info, c_id@price, @info, @c_id = price, info, c_idendendclass KEYBOARDattr_reader :price, :info, :c_iddef initialize price, info, c_id@price, @info, @c_id = price, info, c_idendend# Dynamic Method DSclass DSdef initialize@data = []enddef addCom *componentcomponent.each{|c| @data << c }enddef count @data.countendclass << DSdef define_get_method *component_namecomponent_name.each do |each|%w-_info _price-.each do |content|define_method ("get_" + each.to_s + content).to_sym do |c_id|comArray = @data.select{|x| x.c_id == c_id}com = comArray.select{|x| x.is_a? eval(each.to_s.upcase)}com[0].send(content[1..-1])endendendendenddefine_get_method :mouse, :keyboard, :cpuend#data preparek1 = KEYBOARD.new 10, "keyboard_1", 1k2 = KEYBOARD.new 40, "keyboard_1", 2k3 = KEYBOARD.new 100, "keyboard_1", 3c1 = CPU.new 200, "cpu_1", 1m1 = MOUSE.new 1000, "apple Inc", 1ds = DS.newds.addCom k1, k2, k3, c1, m1p ds.countp (ds.get_mouse_info 1), (ds.get_mouse_price 1)p ds.get_keyboard_info 1p ds.get_cpu_info 1# more about dynamic methodclass Computerdef initialize computer_id, data_source@id = computer_id@data_source = data_sourcedata_source.methods.grep(/^get_(.*)_info$/){Computer.define_component $1}enddef self.define_component namedefine_method(name){info = @data_source.send "get_#{name}_info", @idprice = @data_source.send "get_#{name}_price", @idresult = "#{name.capitalize}: #{info} $#{price}"return "**#{result}" if price > 500result}endendputs "-----------------final invoke..-----------------"c = Computer.new 1, dsp c.keyboardp c.mouse

请让我们从容面对这离别之后的离别。

metaprogramming-1-Dynamic Method

相关文章:

你感兴趣的文章:

标签云: