为什么它应该在 scalatest 中“”{} 类型检查?

Why does it should "" {} type check in scalatest?

it should 如何接受一个字符串,然后是一个不带括号的函数:

import org.scalatest.FlatSpec
import scala.collection.mutable.Stack

class StackSpec extends FlatSpec {

  it should "pop values in last-in-first-out order" in {

  }

}

为什么不应该是:

it(should("pop values in last-in-first-out order" in {

  }))

我最接近编译的是:

object st {

  class fs {

    def it(f: => Unit) = {

    }

    def should(s: String)(f: => Unit): Unit = {
      Unit
    }

    it(should("pop values in last-in-first-out order") {

    })

  }

}

Scala 在如何将运算符和中缀方法名称转换为方法调用方面有一定的规则。

it should "foo" in {}

转换为

it.should("foo").in({})

在您不使用 "it" 而使用某些 String 的情况下,从 String 到某些包装器的隐式转换有助于提供 should 方法。

调用对象函数的.和函数参数周围的()在scala中是可选的。所以诀窍是 return 链中的对象实现提供你想要的 api 的功能。简单示例:

object InObj {

  def in(func : => Unit) = func
}

object ShouldObj {

  def should(x: String) = InObj
}

trait It {

  def it = ShouldObj
}

class MyClass extends It {

  val f = it should "Do something" in {

  }
}