Строка формата ClojureScript с goog.string.format не заменяет

Я пытаюсь отформатировать цвет в шестнадцатеричном формате для использования в HTML, запустив ClojureScript в браузере.

Вот моя функция «формат».

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

в пространстве имен «strings», где мне потребовалась библиотека 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, похоже, не подставляет значения. Я делаю что-то не так?


person interstar    schedule 08.07.2014    source источник


Ответы (1)


Что делает %x?

Глядя на источник формата, он поддерживает только s, f, d, i и u:

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))
person Konrad Garus    schedule 09.07.2014
comment
%x должен быть шестнадцатеричным. Он работает с версией форматирования строк Clojure. Возможно, это не поддерживается в Javascript. :-( - person interstar; 09.07.2014
comment
В данном случае я предполагаю, что это то, что поддерживает Java (заметьте, это довольно много), но Google Closure — нет. См. dev.clojure.org/jira/browse/CLJS-324. - person Konrad Garus; 10.07.2014
comment
Это не настоящий ответ... Исходная проблема все еще сохраняется. - person n2o; 19.01.2019