面试题答案
一键面试- 实现过程描述:
- 使用
Object.const_set
方法来动态定义类。Object.const_set
方法接受两个参数,第一个参数是类名(作为符号或字符串),第二个参数是新定义的类对象。 - 利用
define_method
方法为类动态添加实例方法。define_method
方法可以在类的上下文中定义一个新的实例方法。 - 使用
attr_accessor
方法为类动态添加属性访问器。attr_accessor
方法会同时创建读取和写入属性的方法。
- 使用
- 代码示例:
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)
上述代码首先从用户输入获取类名、属性名和方法名。然后动态定义类,为类添加属性访问器以及一个将属性值打印出来的方法。最后创建类的实例,设置属性值并调用方法打印属性值。