MST
星途 面试题库

面试题:Ruby元编程中的类定义动态化

在Ruby中,利用元编程技术实现根据用户输入的类名、属性名及方法名,动态定义一个类,并为其添加指定属性和方法。属性为字符串类型,方法实现将属性值打印出来。描述整个实现过程并提供代码示例。
46.2万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
  1. 实现过程描述
    • 使用Object.const_set方法来动态定义类。Object.const_set方法接受两个参数,第一个参数是类名(作为符号或字符串),第二个参数是新定义的类对象。
    • 利用define_method方法为类动态添加实例方法。define_method方法可以在类的上下文中定义一个新的实例方法。
    • 使用attr_accessor方法为类动态添加属性访问器。attr_accessor方法会同时创建读取和写入属性的方法。
  2. 代码示例
class_name = gets.chomp
attr_name = gets.chomp
method_name = gets.chomp

# 动态定义类
klass = Object.const_set(class_name, Class.new)

# 动态添加属性访问器
klass.class_eval do
  attr_accessor attr_name.to_sym
end

# 动态添加方法
klass.class_eval do
  define_method method_name do
    puts send(attr_name.to_sym)
  end
end

# 使用动态定义的类
obj = klass.new
obj.send("#{attr_name}=", "示例值")
obj.send(method_name)

上述代码首先从用户输入获取类名、属性名和方法名。然后动态定义类,为类添加属性访问器以及一个将属性值打印出来的方法。最后创建类的实例,设置属性值并调用方法打印属性值。