を与えるものではありません、私はスカラ座に新たなんだ、と私はSet.contains
ScalaのSet.containsが予想される型の不一致エラーに
に間違った引数を供給する場合、私は時々、型エラーを取得しない理由を理解するのに苦労していますここでREPL(2.9.1.final)を使用して、簡単な例です:
scala> val baz = Map("one" -> 1, "two" -> 2)
baz: scala.collection.immutable.Map[java.lang.String,Int] = Map(one -> 1, two -> 2)
scala> baz.values.toSet.contains("asdf")
res3: Boolean = false
私はそこ型の不一致を取得していないのはなぜ?
scala> val bling = baz.values.toSet
bling: scala.collection.immutable.Set[Int] = Set(1, 2)
scala> bling.contains("asdf")
<console>:10: error: type mismatch;
found : java.lang.String("asdf")
required: Int
bling.contains("asdf")
^
愚かな間違い、言語の微妙、またはコンパイラのバグ:私は別のval
へbaz.values.toSet
を割り当て、その上contains
を呼び出す場合
、私はのget型チェックを行う?
(すなわち
Any
)短い答え考慮にcontains "Hi"
を取り、Int
のLUBを推測し、String
される:言語微妙(サブタイピングと型推論) –