涉及带通配符的类型参数的奇怪编译错误

时间:2017-06-05 14:37:09

标签: scala generics wildcard covariance

对不起,我不能将标题(或问题)制定为比这更有用的信息,因为我不知道这里发生了什么。为什么这段代码不能编译:

$sql_query = "UPDATE [$connectionInfo[Database]].[dbo].[log_record] SET [lock]='0' WHERE CONVERT CONVERT(varchar, Date, 120) = '".json_encode($value['Date']['date'])."'
这是什么?为什么我可以使用变量,但不能将它赋值为val ??? 这对任何人都有意义吗?

1 个答案:

答案 0 :(得分:0)

协变通配符类型,编译器会将Any的容器类型设置为scala> val l: List[_] = List(123) l: List[_] = List(123) scala> l res1: List[Any] = List(123) scala> :type l List[Any] ,如:

List

如上面的代码所示,_容器类型为List,并且由于l协变,因此编译器将设置res' s List[Any]输入R

由于您的代码段Foo 上限Foo,因此Anyval res: Bar[Any] = bak.b //+R <: Foo 之间会发生冲突:

bak.b

因此编译错误被抛出,在 repl 中,它会自动将{{1}}分配给temp res 变量。