我很好奇,如果某些块动态依赖于外部条件,那么通过顺序追加文本块来构建String值的最佳方法是什么.解决方案应该是Scala惯用的,没有太多的速度和内存惩罚.
例如,如何在Scala中重写以下Java方法?
public String test(boolean b) {
StringBuilder s = new StringBuilder();
s.append("a").append(1);
if (b) {
s.append("b").append(2);
}
s.append("c").append(3);
return s.toString();
}
Run Code Online (Sandbox Code Playgroud)
Nik*_*kov 11
由于Scala功能强大且势在必行,因此惯用词一词取决于您希望遵循的范例.你已经在命令式范式之后解决了这个问题.以下是您可以在功能上执行此操作的方法之一:
def test( b : Boolean ) =
"a1" +
( if( b ) "b2" else "" ) +
"c3"
Run Code Online (Sandbox Code Playgroud)
如今,惯用语是指字符串插值。
scala
s"a1${if(b) "b2"}c3"
您甚至可以嵌套字符串插值:
scala
s"a1${if(b) s"$someMethod"}"
怎样使字符串函数的不同组件自己发挥作用呢?他们必须做出决定,这对于我的书中的功能是足够负责的。
def test(flag: Boolean) = {
def a = "a1"
def b = if (flag) "b2" else ""
def c = "c3"
a + b + c
}
Run Code Online (Sandbox Code Playgroud)
这样做的另一个好处是,它显然可以分解最终字符串的不同组成部分,同时在最后概述了它们如何在较高水平下相互组合,而不受任何其他因素的影响。