scala – Set中&function的奇怪行为
Set定义为Set [A].它需要一个变量参数.由于我们正在传递共变量参数,因此按照预期工作:
scala> val a = Set(new Object) a: scala.collection.immutable.Set[Object] = Set(java.lang.Object@118c38f) scala> val b = Set("hi") b: scala.collection.immutable.Set[String] = Set(hi) scala> a & b <console>:10: error: type mismatch; found : scala.collection.immutable.Set[String] required: scala.collection.GenSet[Object] Note: String <: Object,but trait GenSet is invariant in type A. You may wish to investigate a wildcard type such as `_ <: Object`. (SLS 3.2.10) a & b 但以下工作: scala> Set(new Object) & Set("hi") res1: scala.collection.immutable.Set[Object] = Set() 在我看来,scala编译器将Set(“hi”)转换为Set [Object]类型,因此可以工作. 在这里做什么类型推理?有人可以链接到解释行为的规范,以及何时发生?不应该为这种情况抛出编译时错误吗?作为相同操作类型的2个不同输出. 解决方法
不确定,但我认为您正在寻找的内容在
the language spec“本地类型推断”(在本文撰写时,第100页第6.26.4节)中有所描述.
简而言之:Scalac必须为您省略的泛型类型选择值,并在结果编译的约束下选择可能的最具体选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |