用于简单字符串模板的轻量级Clojure库?

时间:2015-02-17 10:28:33

标签: string clojure template-engine

我正在寻找一个可以在clojars中使用的(最好是小的)Clojure库,它允许我替换字符串中的简单模板,例如:

"您好,我的名字是$ {name}"

其中${name}应由模板引擎替换。在Java中,我通常使用完美的JMTE。我知道我也可以在Clojure中使用它,但我想知道是否有更多Clojure友好/惯用的东西。

4 个答案:

答案 0 :(得分:8)

有很多tepmplating库。一些通用的可以是:

注意:如果您只需要一些聪明的格式,那么您就拥有带cl-format功能的标准库clojure.pprintclojure.core/formatjava.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'"