斯卡拉函数调用



我在几个框架中发现了以下函数调用,在我看来,这些函数调用似乎扩展了一些基类。一些例子:

within(500 millis)

"Testcase description" in
  { .... }

第一个示例从 akka 返回持续时间为 500 毫秒的持续时间对象,第二个示例是从 scalatest 返回测试用例的定义。

我想知道这种行为是如何实现的以及如何调用它。

这是通过"Pimp my library"技术完成的。

若要将不存在的方法添加到类中,请定义一个隐式方法,该方法将该类的对象转换为具有该方法的类的对象:

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({ ... })

这应该可以更容易地看到发生了什么。

最新更新