在Clojure中有一个非常方便的函数,名为format
。
它以易于模板化字符串而著称。大多数编程语言都提供了这个函数。
令人不爽的是发现ClojureScript没有实现这个函数。据我所知,旧版本中实现了该函数,但最新版本中并不包含该函数。
是否有人知道这是出于何种原因?
在Clojure中有一个非常方便的函数,名为format
。
它以易于模板化字符串而著称。大多数编程语言都提供了这个函数。
令人不爽的是发现ClojureScript没有实现这个函数。据我所知,旧版本中实现了该函数,但最新版本中并不包含该函数。
是否有人知道这是出于何种原因?
format
在 ClojureScript 中存在。它来自于 Google Closure Library(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))
在这个简短页面的底部有一个几乎相同的例子,文档中也有相关内容。
GCL是ClojureScript的一部分,这点我再怎么强调都不过分。这里还有另外一个参考资料。这意味着format
是ClojureScript的一部分。
下面是引用该参考资料的话:
Google Closure Library是谷歌开发的JavaScript库,基于模块化架构,提供跨浏览器的DOM操作和事件、Ajax和JSON等功能。
它是专为利用Closure Compiler(ClojureScript编译器内部使用的编译器)而编写的。
ClojureScript是建立在Closure Compiler和Closure Library之上的。事实上,ClojureScript名称空间就是Closure模块。
(gstring/format "$%.2f" 2.5)
呢? - gfredericksgstring/format
文档直接引用printf)都是以“%”开头,因此任何其他字符都可以。如果不能依赖这一点,它们将会不太有用。另一个例子是java.util.Formatter的文档(作为clojure.core/format
的基础),其中提供了一个带有美元符号的示例:"Amount gained or lost since last statement: $ %(,.2f"
。 - gfredericks这个相关的jira票据上的评论可能会有所帮助:
撤销这个操作,goog.string.format不符合高级优化,并且它提供的能力少于Clojure的format——因为它使用了java.util.Formatter。对于它实际提供的功能来说,人们可以自己替换一下它,这很简单。对于引起混乱的问题,我们表示歉意。
goog.string.format
)。 - Joaquin
clojure.pprint/cl-format
在 Clojurescript 中也可以使用。它是 Clojure 的基于 Java 的format
的替代品。在我进行的一个快速测试中,似乎clojure.pprint
在 Clojurescript 中不可用,但我不知道为什么会这样。 - Mars