2016-04-14 5 views
0

この行:スカラが見つかりません:値マクロ

"foo".assertNonFatal(_ equals "foo", "error message"); 

このエラー:

Error:(120, 47) not found: value assertion 

このフック:

final implicit class ImplicitAssert[MyType](val me: MyType) { 

    final def assertNonFatal(assertion: (MyType) => Boolean, message: String) 
    : MyType = macro ImplicitAssertMacros.assertNonFatal[MyType] 
} 

このマクロは:

object ImplicitAssertMacros { 
    def assertNonFatal[MyType](c: scala.reflect.macros.blackbox.Context) 
     (assertion: c.Tree, message: c.Tree): c.Tree = { 
    import c.universe._ 
    val me = q"${c.prefix}.me" // "me" from ImplicitAssert class. 
    val numLines = q"Int.MaxValue" 
    val useStdOut = q"false" 
    val assertionTrue = q"assertion($me)" 
    val isFatal = q"false" 
    val toReturn = q""" 
     _root_.info.collaboration_station.debug.internal.Printer.traceInternalAssert($message, $numLines, $useStdOut, $assertionTrue, $isFatal); 
     $me; 
    """ 
    toReturn 
    } 
} 

^このコンパイラエラーの原因や解決方法はわかりません。

マクロがなくソースファイルをコンパイルするときにのみ発生することに注意してください。

+0

マクロを呼び出すコードをコンパイルする前に、コンパイルセッションでマクロをコンパイルしていますか? – pedrofurla

+0

@pedrofurla - sbtのマクロで "compile"を実行すると、[success]で終わります。 .assertNonFatal(_は "foo"、 "error message"に等しい)は "not found:value assertion"で終わる "foo"の "test:compile" –

答えて

1

それは変更することで動作します。

val assertionTrue = q"$assertion($me)" 

DEFマクロは、もはやいかなる表明パラメータが存在しない呼び出しサイト、で膨張します。

関連する問題