对这个问题的递归性质表示道歉,但chosen answer对SO的问题让我质疑我对反思的理解。
我认为反思主要是在程序运行时查询程序的内部事件。此响应中给出的示例修补了Ruby的内置Integer类。
答案 0 :(得分:2)
反射可用于实现后期绑定。
后期绑定可用于实现猴子修补。
可以使用Monkey修补来实现该答案中显示的编码风格。
但是还有其他方法可以实现不需要猴子修补或反射的功能。哎呀,一个好的宏预编译器可以让你接近。
所以,技术上正确,但不是(恕我直言)最好的例子。
答案 1 :(得分:1)
冒着提高递归水平的风险,我想回复,尽管你在那个链接上引用了我的答案。
由于我们对反思的直观理解指向向内看,误解是一件容易的事。这当然也是编程反思的一个重要方面 - 例如,在Ruby中,我们有类似instance_of的方法,允许对象在运行时询问自己的问题。
但请看一下the wikipedia definition of reflection:
反射是一个过程 计算机程序可以观察和 修改自己的结构和 行为。
正如您所看到的,反射不仅仅是运行时自检。它还能够改变运行时行为。重新开放课程也称为“猴子补丁”。您可以阅读更多相关信息here。
猴子补丁是一种方式 扩展或修改运行时代码 动态语言无需改变 原始源代码。
此过程也称为: - 游击队补丁 - 扩展以前声明的类 - 重新开课 - 动态恐怖 - 劫持 - 鸭拳 - 方法调整