面试题答案
一键面试设计思路
- 基础类定义:创建一个基础类,作为所有可扩展类的基类。这个基类可以提供一些通用的方法或者属性。
- 动态继承:在运行时,根据用户需求创建新的类,这些类继承自基础类。
- 方法动态定义:在新创建的类中,动态定义用户所需的新功能方法。
核心代码实现
# 基础类
class BaseClass
# 可以在这里定义一些通用方法
end
# 根据用户需求动态创建类并添加方法
def create_extended_class(class_name, new_method_name, new_method_body)
new_class = Class.new(BaseClass) do
define_method(new_method_name, &new_method_body)
end
Object.const_set(class_name, new_class)
new_class
end
# 示例使用
new_method_body = Proc.new do
puts "这是动态添加的新功能方法"
end
MyExtendedClass = create_extended_class('MyExtendedClass', :new_function, new_method_body)
obj = MyExtendedClass.new
obj.new_function
在上述代码中:
- 首先定义了
BaseClass
作为所有动态扩展类的基类。 create_extended_class
方法接收类名、新方法名和新方法的实现(以Proc
形式)作为参数。- 使用
Class.new(BaseClass)
创建一个继承自BaseClass
的新类,并在这个新类中使用define_method
动态定义新方法。 - 使用
Object.const_set
将新创建的类注册到全局命名空间,这样就可以像使用普通类一样使用这个动态创建的类。 - 最后创建新类的实例并调用动态添加的方法,验证功能是否正确实现。