format

XtalC言語のsprintfのような文字列の組み立てがしたい場合、フォーマット文字列生成式を使います。

フォーマット文字列は、%f"書式指定文字列"で生成します。

fmt: %f" %s = %d ";

fmt2: %f! %d %d !; // %fの後は任意の記号が使える。 (や[を使った場合、)、]が閉じ記号となり、中でネストも許される。

fmt3: %f! %(1)s %(0)s ! // このように書くことで、順番も決めれる。
fmt4: %f! %(foo)s %(hoge)s ! // 名前での順番指定も出来る。

これらはRubyPythonの書式を参考にデザインされました。

RubyPython、またはBoost.Formatでは、2項 % 演算子で合成することが出来るようにデザインされていましたが、Xtalではそのようにせず、フォーマット文字列生成式は、結果として関数呼び出し可能なオブジェクトを返すようにしました。そのオブジェクトに対し関数呼び出しをすることで、結果として合成された文字列を得ることが出来ます。

fmt("aaa", 123).p; //-> aaa = 123

これにより、下のような簡潔な記述が可能となりました。

 [5, 4, 3, 2, 1].map(%f"(%d)").join(":").p; //=> (5):(4):(3):(2):(1)