为什么反射被称为“反射”而不是“内省”?

81

反思的起源是什么? 它似乎更像内省。 为什么它不叫做内省?

内省:向内看;具体来说,是自我审查的行为或过程。

反思

  1. 反射的行为或状态。
  2. 影像;代表;对应物
  3. 将思想集中在某事上;认真考虑
  4. 在思考或冥想时产生的想法。

实际上这是一个有趣的问题。我不确定我是否还能看到任何区别 :p - Johannes Schaub - litb
添加了定义,如果您不喜欢可以删除它。 - mmcdole
1
至少在TCL中似乎没有任何区别。 - jk.
@JohannesSchaub-litb:这是一个必须提问/非常好的问题。我正要发布它,如果没有发现之前有人问过。这只是显示了我们在生活中做事情时不注意周围最细微的细节。 - Veverke
6个回答

65

在法语维基百科的反射(这里)文章中有一个有趣的回答:

反射可以分为两部分:

  • 内省:程序可以检查自身。
  • 干预:程序可以修改其状态/含义。

因此,反射是比内省更强的属性。这就是为什么你会说类型内省是指在运行时知道类型的能力(而改变它们是另一种操作:转换/强制转换)。

编辑:实际上我刚意识到第一个回答就是在说这个^^。是时候拔掉电源了...


2
阅读法语维基百科文章后,我意识到在法语中,“反射”一词可能比英语更紧密地与“自反性”的概念相关联——即某物对其自身的操作。这似乎是理解编程语言中该术语的正确方式。 - Jan Hettich
我仍然看不出来这怎么回答问题:的确,维基百科在区分类型内省方面提供了帮助,因为它只满足于获取信息,而不改变它(尽管再次强调,这究竟与问题有什么关系...我们有多少次使用反射,在运行时实例化类型 - 因此,变化发生在哪里?我们一开始就没有新创建的对象,除非你认为“出现”是一种变化,虽然变化并不在被检查的主体本身上(这也没有太多意义)。 - Veverke
因此,反射是一个比"内省"更复杂的"过程"。那么,支持反射的有什么强有力的论据呢?在编程上下文中,“内省”一词与其所代表的含义密不可分 - 而“反射” - 反思指令/类型的行为与“修改”相比,哪种更接近于“内省”? - Veverke

27

反射源自于“自我审查、自我修改和自我复制”的思想,是为了改变而对自己进行反思。在编程中,您使用反射来检查程序本身的结构,以便在使用它而不仅仅是检查它时使用。你得到的是一个表示程序的东西,你可以用它来修改它,而不仅仅是操作它的数据。

更多信息可以在维基百科文章中找到。


你根本没有回答他的问题。内省:向内看;具体而言,是进行自我检查的行为或过程。 - mmcdole
@Simucal,抱歉我没有更清楚地表达。我已经编辑了答案,以明确它是具有行动意图的考试。 - tvanfosson
他这样说。他指出反射一词是根据程序自身修改的能力来反映变化的。 - Filip Dupanović
1
@kRON,我的初始回答不够具体。 - tvanfosson
我仍然看不出这个回答如何解决问题:的确,维基百科在区分类型内省方面提供了帮助,因为它“满足”于仅获取信息而不更改它(尽管再次强调,这究竟与问题有何关联...我们有多少次使用反射来实例化类型 - 因此,在哪里发生了变化?我们一开始就没有新创建的对象,除非您认为“存在”是一种变化,尽管变化并不在被检查的主体本身上(这也没有太多意义)。 - Veverke

5
反射一词来自于Brian Cantwell Smith的1982年博士论文,可在以下链接中找到:http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf 所谓反射通常只是内省,即访问元数据。Smith对反射的要求包括从元数据到源代码的因果连接,而这通常是缺失的组成部分。想象一下反射是访问实现,而不仅仅是某个计算的新实例的实现,而是计算对其自身实现的访问。显然,Java最初的反射API命名不当,因为它并不具备这种反射意义。

4

还有一个概念叫做类型内省,它指的是在运行时确定对象类型的能力。

编辑:我意识到你的问题是面向语言的,但在Java中,反射用于识别对象具有哪些成员,而内省允许您识别对象具有哪些JavaBeans属性,这就是为什么内省类位于java.beans包中的原因。不过,在其他语言中这两个术语的确切区别我不确定。


1
在 .Net 中,我认为反射这个术语非常恰当,因为它检查的不是类型本身,而是代码的清单,这只是一种描述。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接