【发布时间】:2021-05-25 17:36:10
【问题描述】:
在 ruby 中,我们可以向当前类实例注入新方法
Class A
def something
pp "something"
end
end
A.class_eval do
def another_thing
pp "another thing"
end
end
但是有办法在现有方法中“注入”新方法调用吗?
例子:
重写后的东西他一直在打电话
pp "something"
但现在拨打另一个电话,例如:
pp 1 + 1
所以结果是
def something
pp "something"
pp 1 + 2
end
【问题讨论】:
-
@SergioTulentsev 但是您可以获取对原始方法的引用并在替换的开头或结尾调用原始方法。所以你可以在方法的开头或结尾注入代码。
-
@muistooshort:是的,这就是我的“装饰/包装方法”所暗示的。
-
你说“阻止调用”,但看不到一个块(当然不包括
class_eval的那个) -
@SergioTulentsev,当然可以。我一直都这样做。假设类是
A,方法是符号m。然后A.instance_method(m).source_location为您提供包含该方法的源代码和它开始的行的文件。只需解析文本,插入所需的代码,eval结果字符串和Bob's your uncle。顺便说一句,那是你照片背景中费城的白色沙滩之一吗? -
@SergioTulentsev 对不起,我已经修复了我放置“块”的位置
标签: ruby-on-rails ruby sinatra