关于Scala中的 polymorphic expression cannot be instantiated to expected 错误

如果只需要一个不可变的集合,可以这样子创建,无需 import 引入:
scala> val set = Set(1,2,3)
set: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

如果想用可变的Set,必须import引入它,或者用原路径:
scala> val s = collection.mutable.Set(1,2,3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)

否则,混搭,再使用.toSet什么的,容易出现如此错误:
[error] /home/zhm/sparkAprioriV1/src/main/scala/Sapriori.scala:43: polymorphic expression cannot be instantiated to expected 
type;
[error]  found   : [B >: Int]scala.collection.immutable.Set[B]
[error]  required: scala.collection.mutable.Set[Int]
[error]                     tmp += cdd -> supOrNot(line.toSet, cdd)
[error]                                                 ^
[error] one error found

就是开头规定的是"import scala.collection.mutable.Set",中间定义的函数supOrNot 的第一个参数形式是 trans:Set[Int];此时,如果line<-trans(即调用函数supOrNot时输入的第一个参数)使用了.toSet;而toSet对应的是不可变集合。所以: 要求的参数是mutable的,但是输入的参数是immutable的 ,所以出现此类错误。

scala> List(1,2,3,1,2,3).toSet
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

一般的参数类型不符合提示是mismatch之类的,这种错误较少见,记一下。

参考:12345
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值