Scala

2016-03-31 14 views
-2

'da bir koşulu Option'a dönüştürmek istiyorum.Scala

if (x > 0) { 
    Some(123) 
} else { 
    None 
} 

Daha kısa yol aşağıdaki gibi olabilir. Bana bir denetim (istisnalar yakalamak için tasarlanmış olan) Try kullanmak için

Try(x > 0).toOption.map(_ => 123) 

O biraz doğal olmayan görünüyor. Bunu gerçekleştirmenin başka yolları var mı?

Düzenleme:

Try

x negatif olduğunda bir istisna değil x > 0 çünkü çalışmaz. Option ile

+6

Gerçekten de, "y y = if (x> 0)" derken yanlış bir şey yok. Bazı (123) else Yok ' –

+1

'Try' yönteminiz çalışmıyor. Aynı sonucu “Try (true)” veya “Try (false)” ile elde ederim. – jwvh

+0

@jwvh Benim kötü. Açıklamayı güncelleyeceğim. Teşekkürler. – Shouichi

cevap

3
Some(x).filter(_ > 0).map(_ => 123) 

Eğer filter ve map kullanabilirsiniz.

+0

İyi cevap. Alternatif (daha genel) yaklaşım, "PartialFunction" işlevini kullanmaktır: '({case x eğer x> 0 => 123}: PartialFunction [Int, Int]), ', Scala, kısmi işlev türünü ayırt edemediğinden uygun değil. – Aivean

+8

Daha kısa süreli hala Seçenek (123) .filtre (_ => x> 0) ' –

+0

Bu," if "ifadesinden daha net değil, tamlık açısından:' için {o <- Bazı (123); x> 0} verisi –