为什么reflection被称为反思而不是内省?
什么是反思一词的起源? 这似乎更像是内省。 为什么不叫它呢?
内省 :向内看; 特别是自我检查的行为或过程。
思考 :
- 反映的行为或被反映的状态。
- 一个图像; 表示; 副本
- 把某些想法固定在某物上; 详细的思考
- 思考发生在考虑或冥想。
有一个有趣的答案在法国维基百科reflection文章( 这里 )
reflection可以分解成两部分:
- 反思:一个程序可以检查自己。
- 调解:一个程序可以修改它的状态/含义。
所以反思是比反思更“强大”的财产。 这就是为什么你说types自省能够知道types在运行时(和改变他们是另一个行动:转换/铸造)。
编辑:其实我刚刚意识到第一个答案正是这样说^^。 有时间拔掉自己的电源
思考来源于“自我审视,自我修改,自我复制”的思想,反思自我的变革目的。 在编程中,您使用reflection来检查程序本身的结构,而不是仅仅检查它。 你得到的是你可以用来修改它的程序的表示,而不是它所在的数据。
更多信息可以在wikipedia文章中find。 。
还有另一种称为types自省的概念,指的是在运行时确定对象types的能力。
编辑:我意识到你的问题的目的是为语言不可知的,但在Java中,reflection用于确定一个对象有什么成员,而反思允许您确定一个对象有哪些JavaBeans属性,这就是为什么内省类是在java.beans包。 但是我不确定这些术语在其他语言中的确切区别是什么,
“反思”一词来自Brian Cantwell Smith的1982年博士论文,可在http://publications.csail.mit.edu/lcs/pubs/pdf/MIT-LCS-TR-272.pdf
所谓的反思往往只是内省,即获取元数据。 史密斯对反思的要求包括元数据之间的因果关系 ,这通常是缺失的部分。 想象reflection的一种方式是获得实现,而不仅仅是实现计算的一些新实例,而是计算访问它自己的实现。 当然,Java的原始reflectionAPI是错误的,因为它在这个意义上是不reflection的。
在.Net中,我认为reflection这个术语是非常合适的,因为它不是被检查的types本身,而是代码的performance,这只是一个描述。
从定义3和4的angular度来看,反思可以是内省的。 也就是反思是对自我的反思。 我认为自省是分析自己的代码行为更好的词,因为这个词更具体,但我不认为反思是完全不合适的。