私は次のコードを持っています:
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には1つもありませんし、ClassEitherを拡張することもありません。Option [T]はEither[T、None]を拡張すべきではありませんか?次に、少なくとも1つはEitherのfoldメソッドを使用できます。
私の最終的な考えは、s1とs2をリストとして扱い、それを見つけることでしたが、これをコンパイルすることはできません。
def containsV(orig: MapCanvT):
Option[MapCanvT] = ::[CanvNode](s1, s2).find(_ == Right(orig))