DÜZENLEME: Sadece benim filtre olarak aynı etkiye sahiptir düzleştirmek ve ben Scala 2.9.2 kullanıyorumScala koşullu liste inşaat
harita ve bazı koşullara göre bir liste oluşturmak istediğini aklımızda tutuyoruz. aşağıdaki gibi
t1 :: t2 :: cond(p, t3) :: t4
istediğim davranışıdır: koşul (bu durumda, t3) mesnet p ve T türü bir değer alarak bir fonksiyondur
, aşağıdaki göz önünde bulundurun. p doğruysa, bu vermelidir: Muhtemelen bu tamamen yanlış şekilde düşünüyorum
List[T](t1, t2, t4)
ama mücadele ediyorum:
List[T](t1, t2, t3, t4)
p yanlış olarak değerlendirilirse, bu vermelidir zarif bir çözüm bulmak için. Her yerde Seçenek içerebilir ve daha sonra filtre, ama bu okumak için oldukça zor kodu yapar:
def cond[T](p : => Boolean, v : T) : Option[T] =
{
p match
{
case true => Some(v)
case false => None
}
}
Bu
aşağıdaki sağlar: o gerektirdiğinden ancakscala> (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)
, en zarif çözüm, değil Kullanıcı tüm koşulsuz öğelerini Some() içinde sarmak ve sonunda düzleştirmek için hatırlamak için. Daha şık bir çözüm düşünen var mı?
Bu, ancak 1 :: 2 :: 3 yapım yöntemiyle uyuşmadığı için ideal değildir: kullanımı hatırlamanızı gerektirir ++ yerine genel durumda çalışmaz Yani :: – paulmdavies