- メソッドを動的に定義すること。
- 具体的には、define_methodを使う。
class Computer
def intialize(computer_id, data_source)
@id = computer_id
@data_source = data_source
end
def mosce
info = data_source.get_mouse_info(@id)
price = data_source.get_mouse_price(@id)
result = "Mouse : #{info}, #{price}"
end
def display
info = data_source.get_display_info(@id)
price = data_source.get_mouse_price(@id)
result = "Display : #{info}, #{price}"
end
end
class Computer
def intialize(computer_id, data_source)
@id = computer_id
@data_source = data_source
@data_source.methods.grep(/^get_(.+)_info$/){|item| Computer.define_component(item)}
end
def self.define_component(name)
define_method(name) do
info = data_source.__send__("get_#{name}_info", @id)
price = data_source.__send__("get_#{name}_price", @id)
result = "#{name.capitalize} : #{info}, #{price}"
end
end
end
参照:メタプログラミングRuby