是否可以執行以下操作使用Scala宏:斯卡拉通用宏觀
trait Cacheable {
def cache[T](genValue: => Future[T]): Future[T] = macro Cacheable.cacheImpl[T]
}
object Cacheable {
def cacheImpl[A: c.WeakTypeTag](c: Context)
(genValue: c.Expr[Future[A]]): c.Expr[Future[A]] = {
import c.universe._
reify {
genValue.splice
}
}
}
它不會在可緩存特性以下消息宏功能調用編譯:
在這多個標記行 - 宏實現形狀不正確:必需: (c:scala.reflect.macros.Context)(genValue:c.Expr [=> scala.concurrent.Future [T]]):c.Expr [scala.concurrent 。未來[T]]發現:(c:scala.reflect.macros.Context)(genValue:c.Expr [scala.concurrent.Future [A]]):c.Expr [scala.concurrent.Future [A]]類型不匹配param eter genValue:c.Expr [=> scala.concurrent.Future [T]]不符合c.Expr [scala.concurrent.Future [?A]] - 宏實現的形狀不正確:required:(c:scala。 reflect.macros.Context)(genValue:c.Expr [=> scala.concurrent.Future [T]]):c.Expr [scala.concurrent.Future [T]] found:(c:scala.reflect.macros。 (genValue:c.Expr [scala.concurrent.Future [A]]):參數genValue的c.Expr [scala.concurrent.Future [A]]類型不匹配:c.Expr [=> scala.concurrent.Future [T]不符合c.Expr]
謝謝您的回覆。我沒有在尋找關於代碼片段的有效性或有用性的評論,也沒有尋找對錯誤消息的解釋更多的評論,以回答這樣的片段是否以另一種形式有效。道歉,如果我沒有完全正確的話。 – user3130760