MST

星途 面试题库

面试题:Ruby代码整洁之道之专家难度:元编程与代码整洁结合

利用Ruby的元编程能力,创建一个类 `DataObject`,该类可以根据传入的哈希动态定义属性读写方法。例如,传入 `{name: 'John', age: 30}`,则类实例可以通过 `obj.name` 获取 `John`,通过 `obj.age = 31` 修改年龄。要求代码实现既要满足功能需求,又要严格遵循《Ruby代码整洁之道》中关于元编程的最佳实践,保证代码的可读性、可维护性以及避免潜在的风险。
43.6万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
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