【问题标题】:Is there a good reflection library available for Scala?Scala 有没有好的反射库?
【发布时间】:2011-06-02 03:27:39
【问题描述】:

我正在开发一个需要反射的库,并且需要特定于 Scala 的信息,而不是通过标准 Java 反射 API 提供的信息。现在我正在使用 scalap 中未记录的代码(Scala 等效于 javap)并尝试将它提供的数据与 Java 反射对象相关联,以便我可以调用方法等(scalap 只解析类文件)。

我找到了这个,但那里什么都没有...... https://github.com/dubochet/scala-reflection

...我在 Scala SVN 存储库中搜索了它的踪迹,但也没有找到它(但我可能只是错过了它)。

有谁知道 Scala 反射库,它提供的信息类似于 scalap 提供的信息,但还允许您调用方法、访问字段等,如 Java 反射库?

[编辑]

我想应该更清楚地解释我想要做什么......

我想编写一个库,该库将获取一个文件,例如 Excel 文件中的分隔文本文件或工作表,顶部有标题,还有一个清单,并返回一个对象序列。所以基本上一个看起来像这样的函数:

def parseFile[T](fileName: String)(implicit manifest: Manifest[T]): Seq[T] = {
  // lots of magic ...
}

在一般情况下,这可能是不可能的,而且我敢肯定有很多“可能”的情况非常困难,但我认为有一个有用的子集可以在没有太多复杂性的情况下实现一次我掌握了 scalap(或 scala.reflect,两者相似但不同......)的窍门,并将其与 Java 反射 API 中的正确对象结合起来。我的基本计划是查看文件的标题,查看公共构造函数的参数名称和类型,并在伴随对象上应用方法,选择最匹配文件的那个,然后将文件解析为对象。这是为了更接近脚本而不是应用程序构建。所以我主要只是想构建一些可以节省我时间的东西。

所以我正在编写的库既没有关于它正在创建的类的先验知识,也没有关于它所使用文件的基本结构(分隔的表格文本、Excel 等)之外的任何内容。最好是微创的。

我以前在 Python 中做过类似的事情,但它是侵入性的,因为我要么必须使用指定所需类型的描述符,要么需要使描述符都接受字符串并转换为适当的类型。我认为使用 Scala 丰富的类型信息可以减少侵入性。

【问题讨论】:

  • 您可能会发现发布在我的问题上的答案很有帮助:stackoverflow.com/questions/1469958/…
  • 我没有看到你的问题,但不幸的是,除了将它添加到我的参考列表之外,它并没有帮助。
  • 您是否将结构类型视为反射的手段?
  • @pedrofurla - 请参阅关于我正在尝试做的添加的注释。

标签: reflection scala


【解决方案1】:

可以在运行时以反射方式创建清单。

输入 TypeWrangler here on gitub...

只需删除该类的最后两个方法(特定于 Spring),就可以开始了!

有一天,我会将代码充实到一个完整的反射库中,同时使用 Scalap 中的一些签名逻辑。似乎存在这样的需求。

【讨论】:

  • 感谢您的链接,我一定会参与其中一些复制和粘贴重用的历史悠久的传统。
  • @KevinWright:截至 2014 年 2 月 10 日,情况仍然如此吗?
  • @ErikAllik 如果有的话,那就更真实了。我已经成功地修改了该代码以使用 TypeTags 而不是 Manifests,并且使用宏应该更容易做到这一点。
猜你喜欢
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 2015-12-23
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
相关资源
最近更新 更多