小编Jin*_*arz的帖子

如何在Clojure中将函数的名称作为字符串?

如何在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)

clojure

12
推荐指数
2
解决办法
5643
查看次数

引用和未引用的JavaScript对象属性之间的区别

引用和未引用的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)

javascript object

10
推荐指数
2
解决办法
1691
查看次数

Clojure中序列的延迟串联

这是一个初学者的问题:在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或其他东西懒洋洋地连接结果序列?

clojure lazy-evaluation seq

7
推荐指数
1
解决办法
932
查看次数

如何让Cabal打印所有可用版本的软件包?

如何让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)

haskell cabal

6
推荐指数
1
解决办法
130
查看次数

如何在Python中将\ xXY编码的字符转换为UTF-8?

我有一个文本,其中包含"\ xaf","\ xbe"等字符,正如我从这个问题中理解的那样,它是ASCII编码字符.

我想用Python将它们转换为UTF-8等价物.通常的string.encode("utf-8")抛出UnicodeDecodeError.有没有更好的方法,例如,使用codecs标准库?

品尝这里200个字符.

python unicode utf-8 character-encoding non-ascii-characters

5
推荐指数
1
解决办法
2万
查看次数

Elasticsearch自动切片有什么作用?

是什么Elasticsearch自动切片吗?我发现文档对这个函数非常简洁.我试图寻找这个功能的其他解释,但无济于事.我都没有设法找到Elasticsearch中的切片.

elasticsearch

4
推荐指数
1
解决办法
2172
查看次数

Google Chrome强制下载PHP脚本的源代码

我遇到了Google Chrome(谷歌Chrome 7.0.517.41测试版)的行为,我无法理解.在某些情况下,Google Chrome会下载从我的服务器请求的PHP脚本的源代码,而不是执行它.我对cURL或Firefox没有这个问题; 当我用它们请求相同的URL时,脚本正确执行.

这在我看来相当奇怪,因为我应该是服务器问题,它应该在每个浏览器中都一样.我想我一定忽略了一些东西,或谷歌Chrome正在发送一些不寻常的HTTP标题......我不知道.我在Apache配置文件中检查AddHandlerAddType指示没有成功.你知道这可能导致什么吗?

php apache mod-rewrite google-chrome

3
推荐指数
1
解决办法
8683
查看次数

将嵌套映射分解为键值对

我想将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

3
推荐指数
1
解决办法
234
查看次数

使用Clojure拉链过滤XML中的元素节点

如何使用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)

我怀疑它不必要地复杂,因此我正在寻找更好的解决方案。

xml clojure

3
推荐指数
1
解决办法
239
查看次数