为什么反射被称为反射而不是自省?


79

反射一词的由来是什么?似乎更像是内省。为什么不叫它呢?

内省:向内看; 特别是自我检查的行为或过程。

反射

  1. 反映的行为或反映的状态。
  2. 一个图像; 表示; 对应物
  3. 对某事的想法的固定;详细的思考
  4. 考虑或冥想中出现的思想

其实这是一个有趣的问题。我不确定现在是否会有所不同:p
Johannes Schaub-litb

添加了定义,如果您不喜欢,可以将其删除。
mmcdole

1
至少在TCL中似乎没有任何区别
jk。

@ JohannesSchaub-litb:这是一个必须提出的问题。如果以前没有找到它,我将要发布它。它仅显示我们在生活中所做的事情,而没有关注周围的任何细节。
Veverke

Answers:


63

在法语Wikipedia文章中,“ Reflection”(此处)有一个有趣的答案。

反射可以分解为两个部分:

  • 内省:程序可以自我检查。
  • 代祷:程序可以修改其状态/含义。

因此,反思比内省更为“强大”。这就是为什么您说类型自省,以便能够在运行时知道类型(而更改它们是另一种动作:转换/广播)。

编辑:实际上我才意识到第一个答案就是说^^。该抽出自己的时间了...


2
通过阅读法语Wikipedia文章,我意识到,法语中的“反射”一词可能比英语中的“反射性”(即在自身上起作用的东西)更紧密地联系在一起。这似乎是理解该术语的正确方法,因为它适用于编程语言。
Jan Hettich 2010年

我仍然看不到如何回答这个问题:确实,维基百科在区分类型自省方面有所帮助,因为它仅获得信息而不改变就“满足”了自己(尽管再次如此,这确实是相关的...如何很多时候,我们使用反射来实例化类型-因此,这里的更改发生在什么地方?我们最初没有新创建的对象,除非您认为“存在”更改,否则没有其他更改发生。 -检查对象本身也没有变化(也没有太大意义)
Veverke 2015年

因此,反思是一个比“内省”更多步骤的“过程”。赞成反思的令人信服的论点在哪里呢?内省作为一个词与程序在上下文中代表的含义是紧密相关的,而“反射”是指反映指令/类型比“内省”更接近“修改”的行为?
Veverke

27

反思来自“自我检查,自我修改和自我复制”的思想,以改变为目的对自己的自我进行反思。在编程中,您可以使用反射在使用它的上下文中检查程序本身的结构,而不仅仅是检查它。您得到的是可以用来修改程序的程序的表示形式,而不是用于运行程序的数据。

可以在Wikipedia文章中找到更多信息


您根本没有回答他的问题。内省:内向。特别是自我检查的行为或过程。
mmcdole

@Simucal,对不起,我不清楚。我已经编辑了答案以指定它是出于行动目的而进行的检查。
tvanfosson

他做到了。他指出反射一词是根据程序通过修改自身来反映更改的能力而使用的。
FilipDupanović08年

1
@kRON,我的最初答案并不具体。
tvanfosson

我仍然看不到如何回答这个问题:的确,维基百科在区分类型自省方面有所帮助,因为它仅获得信息而无需更改即可“满足”自身(尽管这又是完全相关的……如何很多时候我们使用反射来实例化类型-因此,这里的更改发生在什么地方?我们最初没有新创建的对象,除非您认为“存在”更改,否则没有其他更改发生。 -检查对象本身也没有变化(也没有多大意义)
Veverke 2015年

4

还有另一个称为类型自省的概念,它是指在运行时确定对象类型的能力。

编辑:我意识到您的问题原本是与语言无关的,但是在Java中,反射用于标识对象具有哪些成员,而自省允许您标识对象具有哪些JavaBeans属性,这就是为什么自省类位于其中的原因java.beans包。我不确定其他语言之间的确切区别是什么,


4

反射一词来自Brian Cantwell Smith的1982年PHD论文,该论文可在以下网站找到: http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf中

所谓的反射通常只是自省,即对元数据的访问。Smith对反射的要求包括从元数据返回的因果关系,通常这是缺少的组件。想象反射的一种方法是访问实现,不仅是计算的某个新实例的实现,而且是计算对其自身实现的访问。当然,Java的原始反射API的名称错误,因为在这种意义上它不是反射性的。


1

在.Net中,我认为反射一词非常合适,因为它不是检查类型本身,而是代码的清单,仅是描述。


1

从定义3和4的意义上讲,反思可以是内省的。也就是说,内省就是对自己的反思。我认为内省是用于代码分析自身的更好的词,因为该词更具体,但我认为反射并不是完全不合适的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.