2015-03-19 96 views
1

我們使用"%,.2f".formatLocal(locale, value)。不幸的是value可以爲空,然後它打印nu。如果value爲空,我們不希望它打印任何東西。這是否有一個Scala成語?使用Scala格式將空格式化爲空格本地

+1

斯卡拉往往不會有「空」的特殊處理,因爲有處理Scala中一個特殊的價值(選項等)更好的方式。然而,if(value == null)「」else「%,. 2f」.formatLocal(locale,value)''有什麼問題? – 2015-03-19 11:22:00

回答

1

可能沒有意義的變量的斯卡拉成語是Option。您可以使用Option.apply轉換的對象可能是nullOption

Option(3.14f : java.lang.Float) //Some(3.14) 
Option(null : java.lang.Float) //None 

然後你就可以使用慣用的Option方法,如foreachmapfoldgetOrElse了預期的效果:

val myOptionString = myOptionFloat.map("%,.2f".formatLocal(locale, _)) 

myOptionString.foreach(println) //only print if the Float is not null 
val myString = myOptionString.getOrElse("") //empty string if the Float is null 

或全部一起打印:

Option(myFloat).foreach(value => println("%,.2f".formatLocal(locale, value)) 

和存儲:

Option(myFloat).fold("")("%,.2f".formatLocal(locale, _)) 
+0

謝謝!我喜歡'Option(myFloat).fold(「」)(「%,. 2f」.formatLocal(locale,_))'但我擔心它會混淆我們團隊中的Java程序員,所以我們可能會堅持'if (value == null)「」else「%,. 2f」.formatLocal(locale,value)' – 2015-03-20 17:48:00

+1

當然我明白。你可以試着用'Option(myFloat).map(value =>「%,. 2f」.formatLocal(locale,value))。getOrElse(「」)'來讓Java程序員放心,不使用下劃線語法,並使用'getOrElse'而不是'fold')。一旦他們開始習慣Scala的簡潔和表達的語法,就沒有回頭路了! – 2015-03-20 19:03:31