scala - 是否可以在 Scala 2.10 中通过一次宏调用生成多个顶级类?

标签 scala macros scala-2.10

我有一个包含大量样板的程序(遗憾的是,即使通过 Scala 机制也无法简化)。但是,如果有一种方法可以使用宏生成复杂的顶级类,那么所有这些样板都会消失。例如:

package org.smth

generate(params)

// becomes

class A { ... }
object B { ... }
case class C { ... }

Scala 2.10 宏可以实现吗?

最佳答案

简而言之:没有。

Macro types (即生成类型而不是方法的宏)是计划中的,但它们没有被设计或指定,更不用说实现了,它们不会用于 2.10。

此外,单个宏调用只能生成单个类型。但是,由于类型(特别是 object s)可以嵌套,这不是限制:您可以只生成单个顶级 object包含您需要的所有类。这和你的代码之间的区别基本上是一个额外的import陈述:

package org.smth

type O = Generate(params)

// becomes

object O {
  class A { ... }
  object B { ... }
  case class C { ... }
}

// which means you need an additional

import O._

他们想了package可以生成充满类的整个包的宏,但意识到自从 object s 是 package 的超集s 和 type 宏可以生成 object s 那将是不必要的。

关于scala - 是否可以在 Scala 2.10 中通过一次宏调用生成多个顶级类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295971/

相关文章:

c++ - 在 C++ 中使用反斜杠定义函数

ios - 获取预处理器宏的特定值

Scala 反射错误 : this is an inner module, 在 InstanceMirror 上使用reflectModule 来获取其 ModuleMirror

scala - 字符串差异作为列表

postgresql - 使用 Mockito 模拟具有功能参数的 Scala 方法

scala - 类型构造函数是单子(monad)还是有单子(monad)?

scala - 尝试添加 scala-uri 插件来 Play Framework

scala - 如何从 Spark 中的 RDD 和数据帧中过滤?

javascript - 运行 share/scripts/javascript 命令行宏

scala - 如何在模式匹配期间进行隐式转换