【发布时间】:2016-12-04 18:12:40
【问题描述】:
我的问题基于answer to the topic “redefining a single ruby method on a single instance with a lambda”。
如何重新定义方法并在新方法中调用原始定义? some_object 类的其他实例不应受到影响。
def some_object.some_method
# call original `some_object.some_method` here
do_something_else
end
【问题讨论】:
-
@AndrewPiliser 我以前见过这个问题,但据我了解,它是关于重新定义特定类的所有实例的方法,而我的问题是关于在不触及任何行为的情况下重新定义特定对象的方法其他物体。我已经更改了我的问题以使其更清楚。
-
没有单例方法。 Ruby 中的每个方法都是实例方法。你所说的“单例方法”只是单例类的一个实例方法。 Ruby 中的每个方法都是类中的实例方法,因此没有什么特别之处,问题完全适用。 (我并不是说因为我的答案是公认的答案,所以我不在乎代表。)一旦你理解了这一点,Ruby 突然变得很多简单了。跨度>
-
@JörgWMittag Your answer on the other question 很棒但非常广泛——非常适合博客文章。我觉得我的问题与上面链接的问题不同,因为它是一种开放的解释(红宝石示例似乎无效:
Foo定义了两次,尚不清楚他是要解释继承还是更改Foo实例(全部/其中一个?)在运行时。考虑到该问题的表述有多模糊,您的回答实际上确实是公正的。
标签: ruby monkeypatching