7

チャンクの一部が外部条件に動的に依存している場合、テキスト チャンクを順次追加して 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();
}
4

5 に答える 5

8

最近では、イディオムは文字列補間を意味します。

s"a1${if(b) "b2" else ""}c3"

文字列補間をネストすることもできます:

s"a1${if(b) s"$someMethod" else ""}"
于 2016-10-11T17:41:21.397 に答える
2

@om-nom-nomが言ったように、あなたのものはすでに十分に慣用的なコードです

def test(b: Boolean): String = {
  val sb = new StringBuilder
  sb.append("a").append(1)
  if (b) sb.append("b").append(2)
  sb.append("c").append(3)
  sb.toString
}

別のバージョンを提案することはできますが、必ずしもパフォーマンスが向上したり、「スケーラっぽい」とは限りません。

def test2(b: Boolean): String = "%s%d%s%s%s%d".format(
  "a", 
  1,
  if (b) "b" else "",
  if (b) 2 else "",
  "c",
  3)
于 2013-05-17T10:37:41.363 に答える