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
}

私が知っているように、Groovy にはuseこのような場合のキーワードがあります。Scala で特定のコード ブロックに暗黙的な関数を提供する方法はありますか?

4

1 に答える 1

4

変換関数から への関数を取るようにドルを変更できますUnit

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

次に、次のようにドルを使用できます。

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