我想让这个懒惰的球,它是一个集时,条件不满足和可变的。设置否则
我以为这会有用
当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
1条答案
按热度按时间zf9nrax11#
GOTTENSET
的推断类型确实是(不可变的)Set[Long]
,因此是错误的。为什么?为什么?因为
Set
是mutable.Set
和Set
之间最具体的公共类型。fold
的返回类型就是这个最具体的公共类型。如果你不知道你的变量是否是一个可变集,你就不能安全地写
+=
。您仍然可以使用模式匹配来检查运行时类型,但在这种情况下,最好保留
Either
。Either[mutable.Set, Set]
,或者只是坚持使用不可变的set。这取决于你想用这段代码实现什么,我们不能在没有更多上下文的情况下给予更多的指导,但是这样的代码绝对是一种“气味”。*