小编Mon*_*ais的帖子

Introspect参数传递给Scala宏

我想编写一个Scala宏,它将一个case类的实例作为参数.可以传递给宏的所有对象都必须实现特定的标记特征.

以下代码段显示了标记特征和实现它的两个示例案例类:

trait Domain
case class Country( id: String, name: String ) extends Domain
case class Town( id: String, longitude: Double, latitude: Double ) extends Domain
Run Code Online (Sandbox Code Playgroud)

现在,我想使用宏编写以下代码,以避免运行时反射的严重性及其线程不安全:

object Test extends App {

  // instantiate example domain object
  val myCountry = Country( "CH", "Switzerland" )

  // this is a macro call
  logDomain( myCountry )
} 
Run Code Online (Sandbox Code Playgroud)

logDomain在不同的项目中实现,看起来类似于:

object Macros {
  def logDomain( domain: Domain ): Unit = macro logDomainMacroImpl

  def logDomainMacroImpl( c: Context )( domain: c.Expr[Domain] ): c.Expr[Unit] = { …
Run Code Online (Sandbox Code Playgroud)

macros scala scala-macros

12
推荐指数
2
解决办法
1388
查看次数

标签 统计

macros ×1

scala ×1

scala-macros ×1