猴子补丁/课程重新开放真的是反思的一个例子吗?

时间:2009-02-13 20:05:35

标签: oop reflection terminology monkeypatching late-binding

对这个问题的递归性质表示道歉,但chosen answer对SO的问题让我质疑我对反思的理解。

我认为反思主要是在程序运行时查询程序的内部事件。此响应中给出的示例修补了Ruby的内置Integer类。

  • 这不是更像函数重载/继承而不是运行时修改吗?
  • 班级重新开放真的是反思的一个例子吗?

2 个答案:

答案 0 :(得分:2)

反射可用于实现后期绑定。

后期绑定可用于实现猴子修补。

可以使用Monkey修补来实现该答案中显示的编码风格。

但是还有其他方法可以实现不需要猴子修补或反射的功能。哎呀,一个好的宏预编译器可以让你接近。

所以,技术上正确,但不是(恕我直言)最好的例子。

答案 1 :(得分:1)

冒着提高递归水平的风险,我想回复,尽管你在那个链接上引用了我的答案。

由于我们对反思的直观理解指向向内看,误解是一件容易的事。这当然也是编程反思的一个重要方面 - 例如,在Ruby中,我们有类似instance_of的方法,允许对象在运行时询问自己的问题。

但请看一下the wikipedia definition of reflection

  

反射是一个过程   计算机程序可以观察和   修改自己的结构和   行为。

正如您所看到的,反射不仅仅是运行时自检。它还能够改变运行时行为。重新开放课程也称为“猴子补丁”。您可以阅读更多相关信息here

  

猴子补丁是一种方式   扩展或修改运行时代码   动态语言无需改变   原始源代码。

     

此过程也称为:    - 游击队补丁    - 扩展以前声明的类    - 重新开课    - 动态恐怖    - 劫持    - 鸭拳    - 方法调整