【发布时间】:2015-02-17 10:28:32
【问题描述】:
我正在寻找 clojars 中可用的(最好是小的)Clojure 库,它允许我替换字符串中的简单模板,例如:
“你好,我的名字是 ${name}”
其中${name} 应替换为模板引擎。在 Java 中,我通常使用运行良好的JMTE。我知道我也可以从 Clojure 中使用它,但我想知道是否有一些对 Clojure 更友好/惯用的东西。
【问题讨论】:
标签: string clojure template-engine
我正在寻找 clojars 中可用的(最好是小的)Clojure 库,它允许我替换字符串中的简单模板,例如:
“你好,我的名字是 ${name}”
其中${name} 应替换为模板引擎。在 Java 中,我通常使用运行良好的JMTE。我知道我也可以从 Clojure 中使用它,但我想知道是否有一些对 Clojure 更友好/惯用的东西。
【问题讨论】:
标签: string clojure template-engine
您可以使用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 "XYZ")
(<< "My name is ~{my-name}.")
; Returns: "My name is XYZ."
(let [x 3
y 4]
(<< "~{x} plus ~{y} equals ~(+ x y)."))
; Returns: "3 plus 4 equals 7."
注意花括号~{}和括号~()的区别。
【讨论】:
有相当多的模板库。一些通用的有:
注意:如果您只需要一些巧妙的格式化,您可以使用标准库clojure.pprint 和cl-format 函数和clojure.core/format,它是java.util.Formatter 的包装器。
【讨论】:
cl-format 的用法,请查看answer
虽然不是图书馆,但在Clojure, the Essential Reference book 中找到了这个例子。
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'"
【讨论】:
hi{there} 不起作用。
我找到了this。
也许这就是你想要的。
【讨论】: