面试题答案
一键面试class DataObject
def initialize(attributes = {})
attributes.each do |attr, value|
define_attribute_methods(attr)
instance_variable_set(:"@#{attr}", value)
end
end
private
def define_attribute_methods(attr)
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def #{attr}
instance_variable_get(:"@#{attr}")
end
def #{attr}=(value)
instance_variable_set(:"@#{attr}", value)
end
RUBY
end
end
使用示例:
obj = DataObject.new(name: 'John', age: 30)
puts obj.name # 输出 John
obj.age = 31
puts obj.age # 输出 31