Clojure <> ClojureScript; например: функция "формат"

Это очень удобная функция в Clojure, которая называется format. Он известен своей способностью легко создавать шаблонные строки. Эта функция обычно доступна на большинстве языков программирования.

Я был немного раздражен, обнаружив, что ClojureScript не выполняет эту функцию. Насколько я мог исследовать, он был реализован в более старых версиях, но последний из них не содержит функции.

Кто-нибудь знает, есть ли причина для этого?

Ответы

Ответ 1

format существует в ClojureScript. Это происходит из Библиотеки Google Closure (GCL), которая является фундаментальной частью ClojureScript. К сожалению, это может быть сложно использовать. Обычный способ - потребовать как [goog.string :as gstring] и [goog.string.format], а затем использовать пространство имен gstring.format. Например:

(ns rostering.components.services
  (:require 
    [goog.string :as gstring]
    [goog.string.format]))

(str "$" (gstring/format "%.2f" 2.5))

Практически такой же пример находится внизу этой короткой страницы документации.

Я не могу сказать достаточно, насколько часть ClojureScript является GCL. Вот еще одна ссылка. Это означает, что format - это функция, которая является частью ClojureScript.

Вот цитата из этой справки:

Библиотека Google Closure - это javascript-библиотека, разработанная Google на основе модульной архитектуры и предоставляющая кросс-браузерные функции для манипуляций и событий DOM, ajax и JSON, среди других функций.

Он написан специально для использования компилятора Closure (который используется внутри компилятором ClojureScript).

И ClojureScript построен на Closure Compiler и Closure Library. Фактически, пространства имен ClojureScript являются модулями Closure.

Ответ 2

Этот комментарий к соответствующему биту jira может быть полезным:

При помощи этого метода goog.string.format не поддерживает расширенную оптимизацию и предоставляет несколько возможностей формата Clojure, что очень многое делает из-за java.util.Formatter. Извинения за отторжение, но это просто для людей, чтобы загладить себя за немного функциональности, которую он фактически обеспечивает.