Предоставляет неявные функции для блока кода в Scala
Предположим, что класс определяет неявную функцию, которая преобразует целое число в строку:
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
}
Как я знаю, у Groovy есть ключевое слово use
для случая, как это. Есть ли способ предоставить неявные функции для определенного блока кода в Scala?
1 ответ
Решение
Вы можете изменить доллар таким образом, чтобы он переводил функцию из функции преобразования в Unit
,
dollar(f:(Int => String) => Unit) = {
//...
}
Тогда вы можете использовать доллар так:
dollar ( implicit conversion => {
printAmount(14)
})