Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 是否可以使用SBT的反射?_Scala_Reflection_Sbt_Scala 2.10 - Fatal编程技术网

Scala 是否可以使用SBT的反射?

Scala 是否可以使用SBT的反射?,scala,reflection,sbt,scala-2.10,Scala,Reflection,Sbt,Scala 2.10,我正试图用SBT(对我来说是全新的工具)生成一些样板文件。我使用sbt文件作为任务的主要参考。我已经看到这个项目使用从头开始的代码生成,但我的情况略有不同,因为我想从另一个类生成一些类。我假装使用新的Scala 2.10.0-M4反射功能来实现这一点。需要什么样的基本配置才能从SBT构建中获得反射 到目前为止,sbt无法找到scala.reflect.runtime.universe包,我不知道问题是来自新的scala jar分区还是来自错误的配置。此外,我的sbt关于: 顺便问一下,有人知道其

我正试图用SBT(对我来说是全新的工具)生成一些样板文件。我使用sbt文件作为任务的主要参考。我已经看到这个项目使用从头开始的代码生成,但我的情况略有不同,因为我想从另一个类生成一些类。我假装使用新的Scala 2.10.0-M4反射功能来实现这一点。需要什么样的基本配置才能从SBT构建中获得反射

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


顺便问一下,有人知道其他使用SBT生成源代码的项目吗?

如果您使用的是2.10.0-SNAPSHOT,那么您应该选择
scala.reflect.runtime.universe
。查看了解更多信息。

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

  • 非常前沿:让SBT版本在Scala 2.10上运行(即使是0.13分支也没有),或者等待它。最大的问题不只是你必须自己重新编译SBT,而是重新编译Scala 2.10所需的每一个SBT插件。从长远来看,这也许是按你的要求去做的最好策略,但现在可能需要付出很多努力。但是,请注意,如果没有邪恶的技巧,就不能对编译后的代码使用反射,因为代码生成应该在编译之前进行。如果需要这样做,请考虑使用宏在程序中编译时生成代码。这不包括SBT,而且更加标准,但我不确定您是否可以在这个版本中生成完整的类(我认为这是为将来计划的)
  • 继续老一套:坚持使用Scala2.9,使用scalap的功能(ScalaSigParser)进行编译时反射。问题是API不同(不确定深度),并不真正支持公共使用,尽管不同的人已经使用它很多年了。对于我正在运行的项目,一位同事实施了一种方法,我将其集成到我的项目的SBT中(https://github.com/ps-mr/LinqOnSteroids/); 除此之外,我还使用Scalate编写用于代码生成的模板,这非常强大。 具体请参见,它调用 和(用于
    ScalaSigParser
    的一些非完全通用包装)。生成代码的Scalate模板位于 ,这里最相关的是。 甚至涉及到更多的东西,我担心你实际上需要一个结帐和玩它,看看它到底做了什么,但请随意提问
请注意,该代码受BSD许可证保护,因此如果复制该代码,则需要保留原始代码


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

我的意思是scala.reflect.runtime.universe,但我键入了错误(已更正)。我要读那篇文章。谢谢。我尝试了宏代码生成,但是我发现我的特殊情况有一些限制。因此,我决定启动自己的发电机,没有SBT,因为这个问题的问题。我的生成器随着时间的推移正在失去可维护性,只是因为我没有使用模板。在过去的几天里,我听说了Scalasti和Scalate,这正是我的新主流。所以,你的例子真的很受欢迎。非常感谢你。
[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