我正在寻找一个可以在clojars中使用的(最好是小的)Clojure库,它允许我替换字符串中的简单模板,例如:
"您好,我的名字是$ {name}"
其中${name}
应由模板引擎替换。在Java中,我通常使用完美的JMTE。我知道我也可以在Clojure中使用它,但我想知道是否有更多Clojure友好/惯用的东西。
答案 0 :(得分:8)
有很多tepmplating库。一些通用的可以是:
注意:如果您只需要一些聪明的格式,那么您就拥有带cl-format
功能的标准库clojure.pprint。
clojure.core/format
是java.util.Formatter
的包装器。
答案 1 :(得分:2)
我找到了this。
也许这就是你要找的东西。
答案 2 :(得分:1)
您可以使用<<
项目中的core.incubator字符串插值宏。
要使用它,请将[org.clojure/core.incubator "0.1.4"]
添加为project.clj
文件中的依赖项。 (注意:请查看core.incubator的GitHub page以获取最新的安装说明。)
示例用法:
(ns example
(:require [clojure.core.strint :refer [<<]]))
(def my-name "John")
(<< "My name is ~{my-name}.")
; Returns: "My name is John."
(let [x 3
y 4]
(<< "~{x} plus ~{y} equals ~(+ x y)."))
; Returns: "3 plus 4 equals 7."
请注意使用花括号{}
和括号()
之间的区别。
答案 3 :(得分:0)
尽管不是图书馆,但在Clojure, the Essential Reference书中找到了此示例。
replace
可用于实现简单的文本替换 系统。输入字符串包含系统专用的占位符 可以从已知替换列表中识别并替换:
(def text "You provided the following: user {usr} password {pwd}")
(def sub {"{usr}" "'rb075'" "{pwd}" "'xfrDDjsk'"})
(transduce
(comp
(replace sub)
(interpose " "))
str
(clojure.string/split text #"\s"))
;; "You provided the following: user 'rb075' password 'xfrDDjsk'"