2013-04-26 14 views
48

Dizinde bir öğe almaya çalışırken bir Listede Seçenek almak için yalnızca Scala toplama API'sini kullanmanın bir yolu var mı?Scala'da Koleksiyon'da bir dizinden bir Seçenek nasıl alınır?

Bu işlevin eşdeğerini arıyorum, var mı?

def optionalValue[T](l: List[T], index: Int) = { 
    if (l.size < (index+1)) None 
    else Some(l(index)) 
} 

Teşekkür

cevap

104

Evet, bir işleve Int => Option[A] koleksiyonunuzu kaldırabilir:

scala> List(1,2,3).lift 
res0: Int => Option[Int] = <function1> 

scala> List(1,2,3).lift(9) 
res1: Option[Int] = None 
+0

Güzel! teşekkürler! – Loic

+10

Scala'da çok fazla veri yapısı için 'lift'i' gördüm, adlandırma (ve soyutlama) ardındaki mantık nedir? – kosii

+2

@kosii cevapla biraz geç olabilir, ancak bu durumda "kaldırma", "Int => T" türünün kısmi işlevinden "Int => Option [T]" türünde bir fonksiyona dönüşümü ifade eder. Daha genel olan bir şeyden daha genel bir şeye dönüştürmek ya da başka bir deyişle, yeni bir yapıyı "ekleyerek", yaygın bir terimdir. bir monadeyi bir monad transformatörüne dönüştürmek veya bir funktoru serbest bir monoya dönüştürmek. Bu terimin kategori teorisinden geldiğini düşünüyorum, ancak kesin referanslar bulamadım. –