【问题标题】:Why is reflection called reflection instead of introspection?为什么反射称为反射而不是内省?
【发布时间】:2008-12-09 02:09:34
【问题描述】:

反射一词的由来是什么?这似乎更像是自省。为什么不叫这个?

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

Reflection:

  1. 反映的行为或被反映的状态。
  2. 图像;表示;对应
  3. 将想法固定在某事上;慎重考虑
  4. 在考虑或冥想中出现的想法。

【问题讨论】:

  • 其实这是一个有趣的问题。我不确定我是否看到任何区别:p
  • 添加了定义,如果你不喜欢你可以删除它。
  • 至少在TCL好像没有什么区别
  • @JohannesSchaub-litb:这是一个必须提出/很好的问题。如果之前没有找到它,我只是在发布它的边缘。它只显示了我们在生活中做了多少事情,而没有关注周围最细微的细节。

标签: language-agnostic reflection


【解决方案1】:

在法语维基百科文章中有一个有趣的答案反射 (here)

反射可以分为两部分:

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

因此,反思是比内省“更强”的属性。这就是为什么您说type introspection 是因为能够在运行时知道类型(更改它们是另一种操作:转换/转换)。

编辑:实际上我刚刚意识到第一个答案就是这样说的^^。是时候拔掉自己的电源了……

【讨论】:

  • 阅读法语维基百科的文章后,我意识到在法语中,“反射”一词可能比在英语中更紧密地与“自反性”的概念相关联——即某种事物在自身上运行。这似乎是理解该术语适用于编程语言的正确方法。
  • 我仍然看不出这是如何回答这个问题的:事实上,维基百科有助于区分类型内省,因为它仅通过获取信息而不改变它来“满足”自己(尽管同样,如何这是否完全相关......我们有多少次使用反射来实例化类型 - 那么,这里发生了什么变化?我们一开始没有新创建的对象,除非你考虑“开始存在”一个变化,虽然变化不是在被检查的对象本身上(也没有多大意义)。
  • 所以反射是一个“过程”,它比“内省”包含更多的步骤。支持反思的令人信服的论点在哪里呢?!自省作为一个词与该术语在编程上下文中的含义密切相关——而“反射”——以哪种方式反映指令/类型的行为更接近于“修改”而不是“自省”?
【解决方案2】:

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

更多信息可以在at the wikipedia article.找到。

【讨论】:

  • 你根本没有回答他的问题。内省:向内看;具体来说,就是自我检查的行为或过程。
  • @Simucal,对不起,我不太清楚。我已经编辑了答案以指定它是带有行动意图的检查。
  • 他做到了。他说反射一词是根据程序通过修改自身来反映变化的能力来使用的。
  • @kRON,我最初的回答并不具体。
  • 我仍然看不出这是如何回答这个问题的:事实上,维基百科有助于区分类型内省,因为它仅通过获取信息而不改变它来“满足”自己(尽管同样,如何这是否完全相关......我们有多少次使用反射来实例化类型 - 那么,这里发生了什么变化?我们一开始没有新创建的对象,除非你考虑“开始存在”一个变化,虽然变化不是在被检查的对象本身上(也没有多大意义)。
【解决方案3】:

反射一词来自 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 包中。不过,我不确定这些术语在其他语言中的确切区别是什么,

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2011-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-15
          • 2010-09-07
          • 2013-01-23
          相关资源
          最近更新 更多