面试题答案
一键面试实现思路
- 定义一个Ruby类,在类中定义一些方法(也可以在运行时动态添加方法)。
- 获取用户输入的方法名。
- 使用
public_send
方法(或者send
方法,但public_send
只调用公共方法更安全)根据用户输入的方法名动态调用类中的方法。
示例代码
class DynamicMethodCall
def method1
puts "This is method1"
end
def method2
puts "This is method2"
end
end
# 获取用户输入
puts "请输入要调用的方法名:"
method_name = gets.chomp
obj = DynamicMethodCall.new
begin
obj.public_send(method_name)
rescue NoMethodError
puts "该方法不存在"
end
method_missing
方法的作用及使用场景
作用
method_missing
是Ruby元编程中的一个重要方法,当对象接收到一个无法识别的方法调用时,Ruby会调用method_missing
方法,并将未识别的方法名及参数传递给它。这使得开发者可以在运行时对未定义的方法做出响应,而不是直接抛出NoMethodError
错误。
使用场景
- 模拟方法调用:可以根据传入的方法名模拟出不同的行为,例如实现一个简单的DSL(领域特定语言)。
- 延迟加载:当某个方法可能不常用,通过
method_missing
在需要时再加载相关代码,提高程序的启动性能。 - 代理模式:在代理对象中,通过
method_missing
将方法调用转发给实际对象,实现代理功能。
示例代码展示method_missing
的使用:
class MethodMissingExample
def method_missing(method_name, *args, &block)
puts "你调用了一个不存在的方法: #{method_name}"
puts "参数是: #{args.join(', ')}" if args.any?
end
end
obj = MethodMissingExample.new
obj.non_existent_method('参数1', '参数2')
上述代码中,当调用obj
对象上不存在的non_existent_method
方法时,method_missing
方法会被触发,并打印相关信息。