面试题答案
一键面试class DynamicMethods
def initialize(runtime_condition)
@runtime_condition = runtime_condition
create_dynamic_methods
end
def create_dynamic_methods
# 根据不同条件创建不同行为的方法
if @runtime_condition == :condition1
define_method(:dynamic_method) do
puts "This is the method for condition1"
end
elsif @runtime_condition == :condition2
define_method(:dynamic_method) do
puts "This is the method for condition2"
end
else
define_method(:dynamic_method) do
puts "Default behavior"
end
end
end
end
# 使用示例
# 实例化对象,传入运行时条件
obj1 = DynamicMethods.new(:condition1)
obj1.dynamic_method # 输出: This is the method for condition1
obj2 = DynamicMethods.new(:condition2)
obj2.dynamic_method # 输出: This is the method for condition2
obj3 = DynamicMethods.new(:other_condition)
obj3.dynamic_method # 输出: Default behavior
代码解释:
- 类定义与初始化:
- 定义
DynamicMethods
类,其initialize
方法接受一个运行时条件runtime_condition
,并将其存储在实例变量@runtime_condition
中。这一步是为了在后续动态创建方法时,依据该条件来决定方法的行为。 - 初始化方法调用
create_dynamic_methods
方法,启动动态方法创建流程。
- 定义
create_dynamic_methods
方法:- 使用
if - elsif - else
控制流语句,根据@runtime_condition
的值来决定创建什么样行为的dynamic_method
。 define_method
是 Ruby 元编程中的关键方法,它动态地在类中定义新的实例方法。这里,根据不同条件定义了不同行为的dynamic_method
。当调用dynamic_method
时,会输出符合相应条件的提示信息。
- 使用
- 使用示例:
- 创建三个
DynamicMethods
类的实例,分别传入不同的运行时条件:condition1
、:condition2
和:other_condition
。 - 调用每个实例的
dynamic_method
,可以看到方法的行为根据传入的运行时条件而改变。
- 创建三个