在这种情况下,Scala宏可以生成方法和隐式吗?

时间:2020-04-07 16:29:50

标签: scala code-generation scala-macros

我想使用scala宏进行某种代码生成。具体来说,我定义了一些Event类型,这些事件将被推送到同一方法(此处为workImpl)并返回特定类型的值。如果我仅调用workImpl,则无法确定返回类型,因为它处理不同的输入并返回不同的结果。但是输入类型和输出类型之间的映射已确定目标是使返回类型可用。

Scala宏很棒,可能会有所帮助。我想通过为每种事件类型添加事件返回类型注释来实现自动代码生成。应该生成的代码为code1 code2

object A {
    private def workImpl(x: Any): Any = ???

    @anno(X_RET)
    case class X()

    @anno(Y_RET)
    case class Y()

    @anno(Z_RET)
    case class Z()

    // code1: auto generate work1 and the implicits
    def work1[T](x:T)(implicit ev: T=>M) = workImpl(x).asInstanceOf[M]
    implicit val X_TO_X_RET: X=>X_RET = null
    implicit val Y_TO_Y_RET: Y=>Y_RET = null
    implicit val Z_TO_Z_RET: Z=>Z_RET = null

    // code2: auto generate these methods
    def work2(x:X) = workImpl(x).asInstanceOf[X_RET]
    def work2(x:Y) = workImpl(x).asInstanceOf[Y_RET]
    def work2(x:Z) = workImpl(x).asInstanceOf[Z_RET]    
}

那么,这有可能吗?如何实现呢?如果不可能,还有其他解决办法吗?

1 个答案:

答案 0 :(得分:0)

我终于找到了可行的解决方案。

storage.wiredTiger.engineConfig.configString:
"eviction_dirty_target=60,
eviction_dirty_trigger=80,eviction=(threads_min=4,threads_max=4)"