代码之家  ›  专栏  ›  技术社区  ›  Andronicus

foreach中的assert导致用于宏调用的参数列表太少

  •  2
  • Andronicus  · 技术社区  · 7 年前

    我用scala测试来检查 Array 包含 数组 给定尺寸的S:

    result.map(_.length == 2).foreach(assert)
    

    这会导致编译错误:

    Error:(34, 39) too few argument lists for macro invocation
        result.map(_.length == 2).foreach(assert)
    

    虽然intellij不表示编译错误。如何测试?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Travis Brown    7 年前

    scala> import scala.language.experimental.macros
    import scala.language.experimental.macros
    
    scala> import scala.reflect.macros.blackbox.Context
    import scala.reflect.macros.blackbox.Context
    
    scala> object IncrementMacro { def inc(c: Context)(i: c.Expr[Int]) = i }
    defined object IncrementMacro
    
    scala> object Increment { def inc(i: Int): Int = macro IncrementMacro.inc }
    defined object Increment
    
    scala> List(1, 2, 3).map(Increment.inc)
    <console>:15: error: too few argument lists for macro invocation
           List(1, 2, 3).map(Increment.inc)
                                       ^
    
    scala> List(1, 2, 3).map(Increment.inc _)
    <console>:15: error: macros cannot be eta-expanded
       List(1, 2, 3).map(Increment.inc _)
                                   ^
    
    scala> List(1, 2, 3).map(Increment.inc(_))
    res1: List[Int] = List(1, 2, 3)
    

    assert(_)