私は Scala 2.9.2 を使用しており、いくつかの条件に基づいてリストを作成したいと考えています。
cond は、述語 p と型 T の値 (この場合は t3) を取る関数です。
t1 :: t2 :: cond( p, t3 ) :: t4
私が望む動作は次のとおりです。p が true の場合、次のようになります。
List[T]( t1, t2, t3, t4 )
p が false と評価された場合、次のようになります。
List[T]( t1, t2, t4 )
私はおそらくこれを完全に間違った方法で考えていますが、エレガントな解決策を考え出すのに苦労しています. オプションをどこにでも含めてからフィルター処理することもできますが、それではコードが読みにくくなります。
def cond[T]( p : => Boolean, v : T ) : Option[T] =
{
p match
{
case true => Some( v )
case false => None
}
}
これにより、次のことが可能になります。
scala> ( Some( 1 ) :: Some( 2 ) :: cond( true, 3 ) :: Some( 4 ) :: Nil ).flatten
res4: List[Int] = List(1, 2, 3, 4)
scala> ( Some( 1 ) :: Some( 2 ) :: cond( false, 3 ) :: Some( 4 ) :: Nil ).flatten
res5: List[Int] = List(1, 2, 4)
ただし、これは最も洗練されたソリューションではありません。ユーザーは、無条件の要素をすべて Some( ) でラップする必要があり、最後にフラット化を行うことを忘れないでください。よりエレガントなソリューションを考えられる人はいますか?