2
Scalaは暗黙的にどこを探しますか?
Scalaの初心者への暗黙の質問は、コンパイラが暗黙の場所をどこで探すのでしょうか。言葉がなかったかのように質問が完全に形づくられることは決してないように見えるので、私は暗黙のうちに意味します。:-)たとえば、integral以下の値はどこから来ますか? scala> import scala.math._ import scala.math._ scala> def foo[T](t: T)(implicit integral: Integral[T]) {println(integral)} foo: [T](t: T)(implicit integral: scala.math.Integral[T])Unit scala> foo(0) scala.math.Numeric$IntIsIntegral$@3dbea611 scala> foo(0L) scala.math.Numeric$LongIsIntegral$@48c610af 最初の質問への回答を学ぶことにした人に続く別の質問は、明白な曖昧さのある特定の状況(しかし、とにかくコンパイル)で、コンパイラがどの暗黙の使用を選択するかです。 例えば、scala.Predefから2つの変換を定義StringするいずれかWrappedStringと相互にStringOps。ただし、どちらのクラスも多くのメソッドを共有しているので、たとえば、Scalaが呼び出し時にあいまいさについて不平を言わないのはなぜmapですか? 注:この質問は、問題をより一般的な方法で述べることを期待して、この別の質問に触発されました。この例は、回答で参照されているため、そこからコピーされました。