3

假设一个类定义了一个将整数转换为字符串的隐式函数:

class Dollar() {
  implicit def currency(num: Int): String = "$" + num.toString

  def apply(body: => Unit) {
    body
  }
}

我们还有一个函数可以打印一个由隐式函数转换的数字:

def printAmount(num: Int)(implicit currency: Int => String) {
  println(currency(num))
}

printAmount()然后我们可以在类的构造函数中调用该方法Dollar

val dollar = new Dollar {
  printAmount(32) // prints "$32"
}

但是,如果我们想为代码块提供隐式函数,则会出现编译错误,因为隐式值不适用:

dollar {
  printAmount(14) // Error: No implicit view available from Int => String
}

据我所知,Groovyuse对这种情况有一个关键字。有没有办法为Scala中的某个代码块提供隐式函数?

4

1 回答 1

4

您可以更改美元,使其将函数从转换函数转换为Unit.

dollar(f:(Int => String) => Unit) = {
  //...
}

然后你可以像这样使用美元:

dollar ( implicit conversion => {
  printAmount(14)
})
于 2013-01-05T06:04:35.037 回答