1

我想编写一个注释宏,添加一个可以在编译时指定的extends <sometype>特征。<sometype>

如何将编译时参数传递给宏扩展?理想情况下,我想在编译器调用中指定一个命令行参数。

4

1 回答 1

1

宏注释无权访问传递给 scalac 的命令行标志。但是,实现此目的的一种可能方法是使用系统属性。

比如在宏注解实现中

// MyMacro.scala
val someType = sys.props.getOrElse("myapp.sometype", ???)

然后将类型作为命令行选项传递

// command-line
scalac -Dmyapp.sometype=foobar Code.scala

同样,可以运行sbt -Dsometype=foobar compile. 但是要注意JVM进程需要以系统属性标志启动,所以设置scalacOptions += "-Dsometype=foobar"可能不起作用。

于 2017-04-14T22:40:38.837 回答