有headOption
方法返回集合头部的Option[T]
。
我希望有removeOption(n: Int)
之类的东西返回并删除第n个元素,如果它在集合的范围内,否则什么都不做并返回None
。
我可以通过模式匹配来实现,但这看起来太乱了。也许implicit class
es会对你有帮助吗?
Actualyl我试过这个:
implicit class RemoveOptionImplicit[A](val t: mutable.Buffer[A]) extends AnyVal {
def removeOption(index: Int) =
if(index >= 0 & index < t.size)
Some(t.remove(index))
else
None
}
但不确定这是不是一个好方法。
答案 0 :(得分:4)
这个怎么样?
import scala.util.Try
def safeRemove[A](mb: collection.mutable.Buffer[A], idx: Int): Option[A] =
Try(mb.remove(idx)).toOption
如果索引很好,它有变异Buffer
的恶劣副作用,但我认为这就是你所要求的。
如果您不想处理异常,那么您的原始想法可以简化为这样。
def safeRemove[A](mb: collection.mutable.Buffer[A], idx: Int): Option[A] =
if (mb.isDefinedAt(idx)) Option(mb.remove(idx))
else None
当然,通过隐式转换对mutable.Buffer
方法进行拉伸操作总是有可能的。