加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 是否可以使用SBT的反射?

发布时间:2020-12-16 19:13:21 所属栏目:安全 来源:网络整理
导读:我试图用SBT生成一些样板(对我来说这是一个全新的工具).我使用 shapeless sbt文件作为我的主要任务参考.我已经看到这个项目从头开始使用代码生成,但我的情况略有不同,因为我想从另一个类生成一些类.我假装使用新的Scala 2.10.0-M4反射功能.从SBT构建中获得反
我试图用SBT生成一些样板(对我来说这是一个全新的工具).我使用 shapeless sbt文件作为我的主要任务参考.我已经看到这个项目从头开始使用代码生成,但我的情况略有不同,因为我想从另一个类生成一些类.我假装使用新的Scala 2.10.0-M4反射功能.从SBT构建中获得反射需要什么基本配置?

到目前为止,sbt无法找到scala.reflect.runtime.universe包,我不知道问题是来自新的Scala jar部门还是来自错误的配置.此外,我的sbt说:

[info] This is sbt 0.13.0-20120530-052139
[info] The current project is {file:/home/jlg/sandbox/abc/}abc
[info] The current project is built against Scala 2.10.0-SNAPSHOT
[info] 
[info] sbt,sbt plugins,and build definitions are using Scala 2.9.2

那么,是否有人知道使用SBT生成源代码的其他项目?

解决方法

当前的SBT版本基于Scala 2.9,源代码生成与SBT一起运行,具有相同的库.基本上有两种选择:

>非常前沿:在Scala 2.10上运行SBT版本(甚至不是0.13分支),或者等待它.最大的问题不仅仅是你必须自己重新编译SBT,而是重新编译Scala 2.10所需的每一个SBT插件.从长远来看,这可能是你提出要求的最佳策略,但现在可能需要付出很多努力.但是,请注意,如果没有恶意技巧,就不能对已编译的代码使用反射,因为代码生成应该在编译之前发生.如果需要这样做,请考虑使用宏在程序内的编译时生成代码.这不包括SBT并且更加标准,但我不确定您是否可以在此版本中生成完整的类(这是我认为计划在未来).
>使用旧版:坚持使用Scala 2.9并使用scalap的功能(ScalaSigParser)进行编译时反射.问题在于API是不同的(不确定有多深),并且没有真正支持公共使用,尽管各种各样的人已经使用它多年.对于我正在运行的项目,一位同事实施了方法,我将其集成到我的项目的SBT中(https://github.com/ps-mr/LinqOnSteroids/);最重要的是,我使用Scalate编写用于代码生成的模板,这非常强大.
特别参见build.sbt,它调用
project/Generator.scala和project/src/main/scala/ivm/generation/ScalaSigHelpers.scala(ScalaSigParser的一些非完全通用的包装器).用于生成代码的Scalate模板
src/main/resources,这里最相关的是src/main/resources/WrappedClassInlined.ssp.
涉及更多的东西,我担心你会非常需要一个结账并玩它来看看它究竟做了什么 – 但随意提问.

请注意,代码受BSD许可证保护,因此如果您复制代码,则需要保留原始版本copyright.

注意:所有链接(许可证除外)都是当前HEAD的稳定性,因此即使在将来的版本中移动/删除文件,它们也不会轻易消失.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读