我有以下代码:
class CSplit(var s1: CanvNode, var s2: CanvNode) extends SplitPane
{
topComponent = s1.merge
bottomComponent = s2.merge
def containsV(orig: MapCanvT): Option[MapCanvT] =
{
def containsIn(cn: CanvNode): Option[MapCanvT] = cn match
{
case Left => None
case Right(mc) => if (mc == orig) Some(mc) else None
}
containsIn(s1) match
{
case Some(mc) => Some(mc)
case None => containsIn(s2)
}
}
}
我想减少 containsV 方法的代码。我的第一个想法是使用 fold 方法来缩短 containsIn 方法。但是 Option 没有,也没有扩展 Class Either。Option[T] 不应该扩展 Either[T, None] 吗?然后至少可以使用 Either 的 fold 方法。
我最后的想法是将 s1 和 s2 视为一个 List 并找到它,但我无法编译:
def containsV(orig: MapCanvT):
Option[MapCanvT] = ::[CanvNode](s1, s2).find(_ == Right(orig))