我在几个框架中发现了以下函数调用,这些调用看起来像是框架扩展了一些基类。以下是一些例子:
within(500 millis)
或者
"Testcase description" in
{ .... }
第一个示例从akka返回一个持续时间为500毫秒的持续时间对象,第二个示例是scalatest中测试用例的定义。
我想知道如何实现这种行为以及它被称为什么。
我在几个框架中发现了以下函数调用,这些调用看起来像是框架扩展了一些基类。以下是一些例子:
within(500 millis)
"Testcase description" in
{ .... }
第一个示例从akka返回一个持续时间为500毫秒的持续时间对象,第二个示例是scalatest中测试用例的定义。
我想知道如何实现这种行为以及它被称为什么。
class Units(i: Int) {
def millis = i
}
implicit def toUnits(i: Int) = new Units(i)
class Specs(s: String) {
def in(thunk: => Unit) = thunk
}
implicit def toSpecs(s: String) = new Specs(s)
另请参阅 "Scala 在哪里查找隐式值?"
如果我没记错的话,那些代码片段可以被解糖化为
within(500.millis)
并且
"Testcase description".in({ ... })
这应该使得看到正在发生的事情更容易。