我正在为我的决赛做准备并遇到了这个问题:
了解Java,C#和Prolog的反射机制 哪个允许 在运行时检查和推理自己的符号表的程序。怎么样 这些机制完整吗? (例如,程序可以检查符号 目前不在范围内?)什么是反射有益?应该是什么用途 认为编程实践好坏?
为什么在符号表方面提出这个问题?我是否可以根据本问题中提到的类和对象编写相同的解决方案:
答案 0 :(得分:1)
我建议您阅读以下页面,以了解相应语言的反思:
阅读完之后,你会看到这些方法的相似之处。 说实话,我从未在Prolog中使用过反射,但是文档应该引导你完成。
反射机制使用symobl表来查找内容。 有关符号表的说明,请参阅here。
这些资源应该让您了解如何回答您的问题
答案 1 :(得分:1)
“符号表”只是“反思”所需要的内部概念:程序在运行时检查自身并使用它动态执行某些操作的能力。 (注意 - 内省与反思之间的差异)。
因此,如果您了解哪些反射是有益的,它是如何在您的目标平台(Java,C#等)中实现的,以及可能存在的限制,您应该能够回答我想的所有问题。
将符号表视为平台/运行时的“实现细节”。根据上面的问题,我认为他们不希望你知道这是如何实现的。
答案 2 :(得分:1)
我认为反射是用于进行元编程的基本工具。
这证明是一种解决(一种)问题的声明方式。 有时,不是构建 解决方案,而是编写允许描述问题空间的内容。也就是说,看看你的问题是否可以用更实用的语言重述。
您知道,我们将语言视为算法的组成部分,例如数据。然后我们可以在语言之间交换组件。
实际上,有趣的Java / Prolog反射的例子是JPL
前段时间我发现了有用的 - 性能 - C#反射。 United发出包允许生成编译代码。
Prolog以无缝方式使用反射:例如,DCG实际上是对声明规则的“简单”重写。
我已经开始了一个项目,希望我能带我去Prolog控制Qt界面, 当然,Qt反射起着重要的作用。
编辑关于符号表的问题:符号是极一般术语。此外,所有语言都有符号概念,(可能)有不同的聚合方式。这是语言的核心。然后问题就是用非常笼统的方式提出的,只是为了检查你对这些基本语言概念的理解。