Scala,如果满足条件,则生成Set,否则生成MutableSet

56lgkhnf  于 6个月前  发布在  Scala
关注(0)|答案(1)|浏览(72)

我想让这个懒惰的球,它是一个集时,条件不满足和可变的。设置否则
我以为这会有用
当condition = True时,

def getSetOrMutableSet(): Either[mutable.Set[Long], Set[Long]] = {
    if (condition) {
      Left(mutable.Set[Long](11,11))
    }
    else {
      Right(Set())
    }
  }

  lazy val GOTTENSET = getSetOrMutableSet().fold(
    right => right,
    left => left
  )

字符串
当我试图
第一个月
但是,当我运行代码时,
value += is not a member of scala.collection.Set[Long]
似乎我的代码总是期待一个Set

zf9nrax1

zf9nrax11#

GOTTENSET的推断类型确实是(不可变的)Set[Long],因此是错误的。
为什么?为什么?因为Setmutable.SetSet之间最具体的公共类型。fold的返回类型就是这个最具体的公共类型。
如果你不知道你的变量是否是一个可变集,你就不能安全地写+=
您仍然可以使用模式匹配来检查运行时类型,但在这种情况下,最好保留Either

  • 如果你真的需要处理这两种类型的set,我建议你继续使用Either[mutable.Set, Set],或者只是坚持使用不可变的set。这取决于你想用这段代码实现什么,我们不能在没有更多上下文的情况下给予更多的指导,但是这样的代码绝对是一种“气味”。*

相关问题