2

次のコードの意図した出力は、数字0.

object Bad extends App {
  implicit val massTable: Map[String, Int] =
    Map("H" -> 1, "He" -> 4, "O" -> 16)

  Implementation.doWork()
}

object Implementation {
  def doWork()(implicit massTable: Map[String, Int]) = println("0".toInt)
}

実際の出力は例外です。

java.util.NoSuchElementException: key not found: 0
at scala.collection.immutable.Map$Map3.apply(Map.scala:156)
at Implementation$.doWork(Main.scala:20)
at Bad$.delayedEndpoint$Bad$1(Main.scala:16)
...

調査の結果、 、 、 に提供された暗黙的なパラメーターが、 からの暗黙的な変換として意図せずに機能するようにするMap実装が示されています。apply(string): IntdoWorkmassTableString => Int

その結果、上記の呼び出しは、によって提供されるメソッドではなく、タイプtoIntの合成メソッドになります。toIntInttoIntStringOps

この種の問題を回避し、目的の出力を達成するための最良の方法は何ですか?

4

0 に答える 0