【问题标题】:ClojureScript format string with goog.string.format doesn't substitute带有 goog.string.format 的 ClojureScript 格式字符串不能替代
【发布时间】:2014-07-08 15:35:23
【问题描述】:

我正在尝试格式化十六进制颜色以用于 HTML,在浏览器中运行 ClojureScript。

这是我的“格式化”函数。

(defn gen-format [& args] (apply gstring/format args) )

在我需要 goog.string 库的“字符串”命名空间中:

(:require [goog.string :as gstring] [goog.string.format :as gformat])

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

document.write(mypackage.strings.gen_format("#%x%x%x",0,0,0));

它只是返回#%x%x%x

它没有崩溃。但是 goog 格式函数似乎没有替换其中的值。我在这里做错了吗?

【问题讨论】:

    标签: clojure clojurescript google-closure-library


    【解决方案1】:

    %x 是做什么的?

    format source sorce,只支持sfdiu

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

    这似乎对我很有效:

    mypackage.strings.gen_format("#%d%d%d", 0, 0, 0)
    

    更新:如果你需要用颜色渲染一个字符串,这些怎么样:

    (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))
    

    【讨论】:

    • %x 是十六进制的。它适用于字符串格式化的 Clojure 版本。也许 Javascript 不支持它。 :-(
    • 在这种情况下,我想这是 Java 支持的东西(请注意,它非常丰富),但 Google Closure 不支持。见dev.clojure.org/jira/browse/CLJS-324
    • 这不是一个真正的答案......原来的问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2012-09-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多