使用goog.string.format的ClojureScript格式字符串不能替代

int*_*tar 5 clojure google-closure-library clojurescript

我正在尝试将十六进制格式化为HTML格式,在浏览器中运行ClojureScript.

这是我的"格式"功能.

(defn gen-format [& args] (apply gstring/format args) )
Run Code Online (Sandbox Code Playgroud)

在"strings"命名空间中,我需要goog.string库:

(:require [goog.string :as gstring] [goog.string.format :as gformat])
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从javascript调用它时:

document.write(mypackage.strings.gen_format("#%x%x%x",0,0,0));
Run Code Online (Sandbox Code Playgroud)

它只是回来了 #%x%x%x

它并没有崩溃.但是goog格式函数似乎并没有代替这些值.我在这里做错了吗?

Kon*_*rus 5

怎么%x办?

纵观格式源SORCE,它只支持s,f,d,iu:

var formatRe = /%([0\-\ \+]*)(\d+)?(\.(\d+))?([%sfdiu])/g;
Run Code Online (Sandbox Code Playgroud)

这似乎对我有用:

mypackage.strings.gen_format("#%d%d%d", 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

更新:如果你需要渲染一个颜色的字符串,这些如何:

(defn hex-color [& args]
  (apply str "#" (map #(.toString % 16) args))

(defn hex-color [r g b]
  (str "#" (.toString r 16) (.toString g 16) (.toString b 16))
Run Code Online (Sandbox Code Playgroud)