如何在Clojure中将函数的名称作为字符串?
到目前为止我所看到的并不像惯用语:
(defn fn-name
[f]
(first (re-find #"(?<=\$)([^@]+)(?=@)" (str f))))
(defn foo [])
(fn-name foo) ;; returns "foo"
Run Code Online (Sandbox Code Playgroud)
编辑:通过提供的提示,我把一个基本的宏放在一起,做我想要的.它看起来更好吗?
(defmacro fn-name
[f]
`(-> ~f var meta :name str))
Run Code Online (Sandbox Code Playgroud) 引用和未引用的JavaScript对象属性/方法名称之间是否存在差异?
例如,这两者之间有什么区别:
var obj1 = {
property1 : "Value 1",
method1 : function() {
return true;
}
};
var obj2 = {
"property1" : "Value 1",
"method1" : function() {
return true;
}
};
Run Code Online (Sandbox Code Playgroud) 这是一个初学者的问题:在Clojure中有没有办法懒洋洋地连接任意数量的序列?我知道有lazy-cat宏,但我想不出它对任意数量序列的正确应用.
我的用例是通过分页(offseted/limited)请求从API延迟加载数据.通过request-fn下面执行的每个请求检索100个结果:
(map request-fn (iterate (partial + 100) 0))
Run Code Online (Sandbox Code Playgroud)
如果没有更多结果,则request-fn返回空序列.这是我停止迭代的时候:
(take-while seq (map request-fn (iterate (partial + 100) 0)))
Run Code Online (Sandbox Code Playgroud)
例如,API最多可以返回500个结果,并且可以模拟为:
(defn request-fn [offset] (when (< offset 500) (list offset)))
Run Code Online (Sandbox Code Playgroud)
如果我想连接结果,我可以使用(apply concat results)但是急切地评估结果序列:
(apply concat (take-while seq (map request-fn (iterate (partial + 100) 0))))
Run Code Online (Sandbox Code Playgroud)
有没有办法如何使用任何一个lazy-cat或其他东西懒洋洋地连接结果序列?
如何让Cabal打印所有可用版本的软件包?跑步cabal -v info package-name打印这样的东西; 如果有许多版本可用:
Versions available: (0.1.5.5), (0.1.5.6), (0.1.6.3), (0.1.6.4), 0.1.6.5,
0.2.4.2, 0.2.5.0, 0.2.6.0, 0.2.7.0 (and 26 others)
Run Code Online (Sandbox Code Playgroud) 我有一个文本,其中包含"\ xaf","\ xbe"等字符,正如我从这个问题中理解的那样,它是ASCII编码字符.
我想用Python将它们转换为UTF-8等价物.通常的string.encode("utf-8")抛出UnicodeDecodeError.有没有更好的方法,例如,使用codecs标准库?
品尝这里200个字符.
python unicode utf-8 character-encoding non-ascii-characters
是什么Elasticsearch自动切片吗?我发现文档对这个函数非常简洁.我试图寻找这个功能的其他解释,但无济于事.我都没有设法找到Elasticsearch中的切片.
我遇到了Google Chrome(谷歌Chrome 7.0.517.41测试版)的行为,我无法理解.在某些情况下,Google Chrome会下载从我的服务器请求的PHP脚本的源代码,而不是执行它.我对cURL或Firefox没有这个问题; 当我用它们请求相同的URL时,脚本正确执行.
这在我看来相当奇怪,因为我应该是服务器问题,它应该在每个浏览器中都一样.我想我一定忽略了一些东西,或谷歌Chrome正在发送一些不寻常的HTTP标题......我不知道.我在Apache配置文件中检查AddHandler并AddType指示没有成功.你知道这可能导致什么吗?
我想将Clojure中的嵌套映射分解为一系列键值对.例如,让我们有这张地图:
{:a :b
:c {:d {:e :f
:g :h}
:i :j}}
Run Code Online (Sandbox Code Playgroud)
这个分解的地图应该如下所示:
[[:a :b]
[:c {:d {:e :f
:g :h}
:i :j}]
[:d {:e :f
:g :h}]
[:e :f]
[:g :h]
[:i :j]]
Run Code Online (Sandbox Code Playgroud)
输出顺序无关紧要.
我正在考虑用递归函数解决这个问题tree-seq,或者clojure.walk.我怀疑我可能会遗漏Clojure标准库中的某些内容.什么是解决这个问题的最佳解决方案?
如何使用Clojure拉链过滤XML中的文本节点?例如,您可能有一个印刷精美的XML文档,该文档将元素节点与包含空格的文本节点交织在一起:
(def doc
"<?xml version=\"1.0\"?>
<root>
<a>1</a>
<b>2</b>
</root>")
Run Code Online (Sandbox Code Playgroud)
如果您要检索的子项的内容,则root可以执行以下操作:
(require '[clojure.data.xml :as xml]
'[clojure.zip :as zip]
'[clojure.data.zip :as zf]
'[clojure.data.zip.xml :as zip-xml])
(-> doc
xml/parse-str
zip/xml-zip
(zip-xml/xml-> :root zf/children zip-xml/text))
Run Code Online (Sandbox Code Playgroud)
但是,这将返回(" " "1" " " "2" " "),包括空格。
如何过滤拉链,以便仅选择元素节点?
我想出了这个。
(def filter-elements (comp (partial filter (comp xml/element? zip/node)) zf/children))
(-> doc
xml/parse-str
zip/xml-zip
(zip-xml/xml-> :root filter-elements zip-xml/text))
; => ("1" "2")
Run Code Online (Sandbox Code Playgroud)
我怀疑它不必要地复杂,因此我正在寻找更好的解决方案。