为什么这样做:
val x = Map[Int,Int]()
val y = (1, 0)
x + y
Run Code Online (Sandbox Code Playgroud)
但不是吗?
val x = Map[Int,Int]()
x + (1, 0)
Run Code Online (Sandbox Code Playgroud)
产生的错误是:
<console>:11: error: type mismatch;
found : Int(1)
required: (Int, ?)
x + (1,0)
^
Run Code Online (Sandbox Code Playgroud)
如果我要进入(1,0)REPL,它会正确输入(Int,Int).
我应该补充说这很好用:
x + (1 -> 0)
Run Code Online (Sandbox Code Playgroud) 在处理一些Java代码时,我想找到一种方法来减少Raw Set以包含其参数化类型.
我也希望它也适用于Scala集,所以我做了以下工作
implicit class Harden[S <% mutable.Set[_]](val set: S) extends AnyVal {
def cast[T] = set.map(_.asInstanceOf[T])
}
Run Code Online (Sandbox Code Playgroud)
这导致了我没想到的编译器错误
Error:(27, 27) field definition is not allowed in value class
implicit class Harden[S <% mutable.Set[_]](val set: S) extends AnyVal {
Run Code Online (Sandbox Code Playgroud)
我在Scala View Bounds或Value Class文档中没有发现任何类型的限制.
为什么不允许这样做?我正在使用Scala 2.10.3.