2015-03-19 91 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

相关问题