【问题标题】:Ada equivalent of Python's dir() methodAda 等效于 Python 的 dir() 方法
【发布时间】:2018-06-09 03:46:09
【问题描述】:

有没有办法在 Ada 中查看类型的属性?到目前为止,我还没有找到任何东西。我希望能够将一个类型传递给具有一些相应 XML 的通用函数,并在不为每条记录编写定制函数的情况下相互解析。显然我需要告诉解析器如何处理基本类型,但我希望自动处理复合。如果我从头开始这样做,Python 的 dir() 方法似乎是我在 Python 中使用的东西,那么有没有更好的方法来完全做到这一点,或者在 Ada 中是否有与 dir() 等效的方法?

【问题讨论】:

  • Python 的dir() 是做什么的?
  • 列出一个类型的所有属性和方法。就我而言,只有变量记录中的字段就可以了。
  • 您可以使用 ASIS 或 libadalang 做到这一点。

标签: xml ada


【解决方案1】:

Ada 没有元编程工具,也没有反射(Java/C# 就是这样处理这些事情的)。由于类型系统主要只存在于编译时,因此您无法在运行时查询太多信息,当然也不是您需要的那种信息。您不能简单地使用泛型函数来做到这一点。

最好的办法可能是从 XML 模式生成 Ada 代码,或者(如果 Ada 类型定义了 XML 结构)使用 ASIS 或 libadalang 从 Ada 类型的 AST 生成解析代码。请注意,这相当复杂,除非您熟悉处理 AST,否则我不会推荐它。如果可以编写 XML 模式,我宁愿使用该模式来生成 Ada 类型和相应的加载代码。

【讨论】:

  • @JeffreyR.Carter 这个包几乎是空的,它唯一做的就是在运行时检查标记类型的标签,这正是 Ada 类型系统在运行时确实存在的一部分。快速查看那里使用的Ada.Tags 表明该包不提供检查标记类型组件的工具(这是 OP 需要的)。
【解决方案2】:

类型具有哪些属性取决于它是哪种类型:

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2010-11-11
    • 2012-01-14
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多