面试题答案
一键面试在Ruby中,可以使用 define_method
方法在运行时动态定义实例方法。以下是代码示例:
class MyClass
def initialize(name)
@name = name
end
end
# 动态定义实例方法
MyClass.class_eval do
define_method(:greet) do
puts "Hello, I'm #{@name}"
end
end
# 创建两个对象实例
obj1 = MyClass.new('Alice')
obj2 = MyClass.new('Bob')
# 调用动态定义的方法
obj1.greet
obj2.greet
调用机制解释:
-
class_eval
:class_eval
是Ruby类的一个方法,它允许在类的上下文中执行一段代码块。在这个例子中,我们使用class_eval
来为MyClass
类定义新的实例方法。 -
define_method
:在class_eval
的代码块中,我们使用define_method
方法来定义一个名为greet
的新实例方法。这个方法接受一个代码块作为参数,该代码块就是新方法的实现。 -
对象实例调用:当我们创建
obj1
和obj2
这两个MyClass
的对象实例后,它们都可以调用动态定义的greet
方法。这是因为define_method
定义的方法是属于类的实例方法,所有该类的对象实例都可以访问和调用它。每个对象实例在调用greet
方法时,会根据自身的实例变量@name
的值来输出不同的问候语,这体现了面向对象编程中对象实例各自维护自己的状态的特性。