2010-10-20 17 views
7

Kutu ve Option monadlarının prevalansı ile bile, burada ve burada boş değerleri kontrol etmek zorundayız. Şimdiye kadar geldiğim en iyisi Box # !! yöntemi:Boş çekleri Scala/Lift içinden nasıl işleyebilirim?

(Box !! possiblyNull).map(_.toString).openOr("") 

Bunu yapmanın daha iyi bir yolu var mı? Ben Box'ın uygulamak yöntemiyle çalıştı:

Box(possiblyNull).map(_.toString).openOr("") 

Fakat derleyici bir Aşırı yüklü tanımına belirsiz bir referans şikayet spesifik olarak:

[InType,OutType](value: InType) 
(pf: PartialFunction[InType,OutType])net.liftweb.common.Box[OutType] 

Bunu oluyor neden emin değilim, ama orada umuyordum "Bu dizgenin değerini ver, ya da sadece" "demenin daha kısa, daha özlü bir yolu olurdu. Ben tryo kullanmayı düşündüm, ama kaçınılması gerektiğinde bir istisna ile uğraşmak için israf ettiğini düşündüm.

cevap

11

I Box ne hakkında bilmiyorum ama burada basit bir örnek oluyor. Seçenek:

scala> val str1:String="abc" 
str1: String = abc 

scala> val str2:String=null 
str2: String = null 

scala> Option(str1).getOrElse("XXX") 
res0: String = abc 

scala> Option(str2).getOrElse("XXX") 
res1: String = XXX 
+0

Vay, bu daha kolay .. teşekkürler. Ayrıca, Box, Lift çerçevesinin Option'u yeniden hızlandırmasıdır. Option'un iki alt sınıfı yerine üçü vardır: Tam, Boş ve Arıza. – Collin

+0

Bu kulağa benzer bir http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/scala/Either.html – pedrofurla

İlgili konular