Clojure:
文字列の補間
How to:
Clojureには組み込みの文字列補間機能がないため、str
関数やformat
関数を使います。
;; strを使う場合
(def name "世界")
(println (str "こんにちは、" name "さん!"))
;; 出力: こんにちは、世界さん!
;; formatを使う場合
(def age 30)
(println (format "私は%d歳です。" age))
;; 出力: 私は30歳です。
Deep Dive
Clojureでは直接的な文字列補間はサポートされていませんが、他の関数を通じて似たようなことができます。歴史的には、ClojureはJavaの仮想マシン(JVM)上で動くため、JavaのStringクラスの機能を利用できます。これがformat
関数の根幹です。
文字列補間の別の方法としては、clojure.pprint/cl-format
関数があります。この関数はCommon Lispのformat
のClojure版です。また、テンプレートエンジンや外部ライブラリを使うこともできます。例えば、strint
ライブラリはScala風の文字列補間を提供します。
文字列補間の実装詳細に関心があるなら、それぞれの関数のソースコードを見るのがいいでしょう。たとえばstr
は可変長引数を取り、それらを連結します。format
はjava.lang.String.format
を呼び出します。
See Also
- Clojureの
str
関数: https://clojuredocs.org/clojure.core/str - Clojureの
format
関数: https://clojuredocs.org/clojure.core/format cl-format
関数: https://clojuredocs.org/clojure.pprint/cl-formatstrint
ライブラリ: https://github.com/dakrone/clj-strint