Java、C#和Prolog反射机制

Java、C#和Prolog反射机制,c#,java,reflection,prolog,C#,Java,Reflection,Prolog,我正在准备期末考试,遇到了这个问题: 了解Java、C#和Prolog的反射机制,所有这些 允许 一种程序,用于在运行时检查自己的符号表并对其进行推理。怎么 这些机制是否完备?(例如,程序是否可以检查 当前不在范围内吗?)反射有什么好处?它应该有什么用途 被认为是好的还是坏的编程实践 为什么要用符号表来回答这个问题?我是否可以编写与我在本问题中提到的类和对象相同的解决方案: 我建议您阅读以下几页,了解相应语言的反映: -搜索“反射” 读了这些之后,你会发现这些方法的相似之处。 老实说,我

我正在准备期末考试,遇到了这个问题:

了解Java、C#和Prolog的反射机制,所有这些 允许 一种程序,用于在运行时检查自己的符号表并对其进行推理。怎么 这些机制是否完备?(例如,程序是否可以检查 当前不在范围内吗?)反射有什么好处?它应该有什么用途 被认为是好的还是坏的编程实践

为什么要用符号表来回答这个问题?我是否可以编写与我在本问题中提到的类和对象相同的解决方案:


我建议您阅读以下几页,了解相应语言的反映:

  • -搜索“反射”
读了这些之后,你会发现这些方法的相似之处。 老实说,我从来没有在Prolog中使用过反射,但是文档应该指导您完成

反射机制使用symobl表查找内容。 有关符号表的说明,请参见

这些资源应该会让您了解如何回答您的问题“符号表”只是一个内部概念,它是“反射”完成其功能所必需的:程序在运行时检查自身并用它动态执行某些操作的能力。(注意内省与反思之间的区别)

因此,如果您了解反射的好处,它是如何在您的目标平台(Java、C#等)中实现的,以及可能存在的限制,那么您应该能够回答所有这些问题


将符号表看作平台/运行时的“实现细节”。根据上面的问题,我认为他们并不希望您确切知道这是如何实现的。

我认为反射是进行元编程的基本工具

事实证明,这是一种解决(某种)问题的声明式方法。 有时,编写一些可以描述问题空间的内容,而不是构建解决方案,可能会很有用。也就是说,看看你的问题是否可以用更实用的语言来重述

你看,我们把语言当作算法的组成部分,就像数据一样。然后我们可以在语言之间交换组件

实际上,有趣的Java/Prolog反射示例如下

不久前,我发现C#reflection很有用,而且性能很好。United to emit包允许生成编译代码

Prolog以无缝的方式使用反射:例如,DCG实际上是对已声明规则的“简单”重写

我已经开始了一个项目,我希望我能带我去Prolog控制Qt接口, 当然,Qt反射起着基础作用


编辑关于符号表的问题:符号是一个非常普遍的术语。此外,所有语言都有一个符号的概念,(可能)不同的聚合。这是语言的核心。然后,这个问题以非常笼统的方式完美地提出,只是为了检查你对这些基本语言概念的理解。

也许可以问你的导师为什么这样表述?当涉及到作业和考试时,最重要的是给出预期的答案,而不仅仅是任何在外界看来是正确的答案。在这种情况下,有答案总比没有好,但你真的需要知道根据你的课程,批判员会对你有什么期望。-TL;DR读与读/写访问