我有以下代碼:應用或操作選項將導致
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。選項[T]不應該擴展[T,None]嗎?然後至少有一個人可以使用Either的摺疊方法。
我最終的想法是把S1和S2的列表,而在找到它,但我不能讓這個編譯:
def containsV(orig: MapCanvT):
Option[MapCanvT] = ::[CanvNode](s1, s2).find(_ == Right(orig))
感謝您的詳細解答,我一直在使用Either上的fold語法,並且過濾方法將非常有用。 –