小编Jay*_*don的帖子

Clojure http客户端库的优缺点

我正在尝试在Clojure中编写一个http文件下载器,在我的其他一个问题中,有人评论说使用专用的http客户端库比使用Clojure和Java自己的api编写代码更好.我做了一些研究并发现了一些,但我无法弄清楚每个的功能,优点和缺点.因此,如果某人可以解释他们的不同之处以及哪一个与我的项目很匹配,那将非常感激.:-D

最初使用Java的库以及相应的Clojure包装器:

Apache HttpClient及其Clojure包装器clj-http

Apache HttpAsyncClient并没有找到任何Clojure包装器.

我猜,Netty和Clojure"包装"是Aleph吗?

Async Http Client及其Clojure包装器http.async.client

最后但并非最不重要的,一个Clojure库:

HTTP的试剂盒

java http clojure

9
推荐指数
2
解决办法
4950
查看次数

参数如何在Clojure中传递?

我知道在Java中,如果我将一个对象作为参数传递给一个方法,那么该方法将让参数变量指向同一个对象而不是重复.在Clojure怎么样?例如:

(defn print-from-reader [rdr]
   (print (.read rdr)))

(...inside some code...
  (with-open [rdr (Reader file)]
    (print-from-rader rdr)))
Run Code Online (Sandbox Code Playgroud)

当传入rdr时,print-from-reader是否会在内存中创建另一个rdr副本,或者它指向已经通过with-open绑定创建的相同rdr?

有没有办法检查两个clojure实例是否指向相同的内存?

抱歉我的错误条款,如"指向"和"实例",我是Clojure的新手,仍在学习它.:-)

clojure

7
推荐指数
2
解决办法
1867
查看次数

在Clojure中,是一个特定的hashmap向量?

关于"Programming Clojure",有一个在向量上使用get函数的例子:

(get [:a :b :c] 1)
-> :b
Run Code Online (Sandbox Code Playgroud)

我调用了(doc get),看起来get函数将hashmap作为参数而不是vector,所以如果vector是某种hashmap,我就会徘徊.我记得一个hashmap可以取一个索引整数,并返回与该索引匹配的值,所以我这样做是为了看看vector是否可以做同样的事情:

([1 2 3 4] 1)
-> 2
Run Code Online (Sandbox Code Playgroud)

它确实返回值2,它在[1 2 3 4]中的索引1处.

这是否意味着vector是一个hashmap,其键值对是索引值对?

clojure

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

“SOCKS5 代理”和“ssh 隧道”是一回事吗?

  1. 我知道我可以通过ssh -D some-port-number remote-server-url.
  2. 我知道我可以将我的应用程序(例如 firefox)配置为使用 socks5 代理(通常通过指定类似的东西socks5://localhost:that-port-number-metioned-above)。
  3. 我听到网上有人将这种技术称为“socks5 代理”或“ssh 隧道”;有时我什至看到人们在谈论“反向 ssh 隧道”。
  4. 但据我所知,socks5 和 ssh 是完全不同的协议,它们之间唯一的相似之处是它们都具有服务器 - 客户端架构。阅读维基定义和谷歌搜索这些概念并没有澄清我的困惑..

那么这些概念—— SOCKS5 proxying, ssh tunneling,是如何相互reverse ssh tunneling关联的?

ssh proxy openssh socks

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

在python 2.7中从包导入名称,子模块或子包的优先级是什么?

官方的Python 2教程中,它说:

请注意,当从a_package导入an_item使用时,该项可以是包的子模块(或子包),也可以是包中定义的其他名称,如函数,类或变量.

那么如果a_package有一个名为的子包an_item,一个名为的变量an_item和一个an_item同时命名的模块呢?什么是优先事项?我做了一个实验,结果表明优先级variable> subpackage> submodule,但我不知道这是否是Python导入功能如下在所有情况下的规范秩序.

python import python-2.7 python-internals

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

"Programming Clojure"一书中"几乎是咖喱"实现的一个例子

在这段代码中,

(defn faux-curry [& args] (apply partial partial args))
Run Code Online (Sandbox Code Playgroud)

我应该如何理解这一部分:

(apply partial partial args)
Run Code Online (Sandbox Code Playgroud)

在我的理解中,'partial'接受一个函数和一些值,然后返回一个函数,其中一些原始函数的变量已修复.它是否首先应用'部分'......第二个'部分',它与args做了什么?有更好的理解方法吗?

clojure

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

Clojure中str和print-str之间的差异/关系

我正在阅读Volkmann的Clojure教程,在该教程中它说函数print-str将内容打印到返回的字符串.这是否意味着:

(print-str a b c ... ) == (str a " " b " " c " " ... )

我尝试使用我的REPL,它表现得像我上面假设的那样,但我只是想知道它是不是真的,或者我在这里遗漏了一些东西......

clojure

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

Lein REPL中的语法突出显示?

我想配置Lein,以便我看到一个彩色的REPL,就像Emacs的nREPL一样.我怎样才能做到这一点?

我在Google上找不到任何帮助.我是否需要先学习Bash脚本?

clojure leiningen

4
推荐指数
2
解决办法
2718
查看次数

没有选择emacs ido建议的内容?

在我当前的工作目录中~/WD有一个abc.txt文件.现在我想abc.txt在子目录下创建另一个~/WD/NEW/.当我输入C-x C-f和目录时~/WD/NEW/abc.txt,ido正在将字符串更改为~/WD/abc.txt,这不是我想要打开的.当我尝试修改字符串时,ido会自动将我的输入"纠正"为错误的字符串.

有什么方法可以解决这个问题吗?

emacs ido

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

实现"分区"函数的递归

我随机阅读了Clojure源代码,我看到分区函数是在递归方面定义的,不使用"recur":

(defn partition
  ... ...
  ([n step coll]
     (lazy-seq
       (when-let [s (seq coll)]
         (let [p (doall (take n s))]
           (when (= n (count p))
             (cons p (partition n step (nthrest s step))))))))
  ... ...)
Run Code Online (Sandbox Code Playgroud)

这样做有什么理由吗?

recursion tail-recursion clojure lazy-sequences

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

"交换!"中的".swap"是什么 源代码吗?

我很好奇,所以我检查了交换的源代码!在clojure存储库上运行,它是这样的:

(defn swap!
  "Atomically swaps the value of atom to be:
  (apply f current-value-of-atom args). Note that f may be called
  multiple times, and thus should be free of side effects.  Returns
  the value that was swapped in."
  {:added "1.0"
   :static true}
  ([^clojure.lang.Atom atom f] (.swap atom f))
  ([^clojure.lang.Atom atom f x] (.swap atom f x))
  ([^clojure.lang.Atom atom f x y] (.swap atom f x y))
  ([^clojure.lang.Atom atom f x y & args] (.swap atom f x y args)))
Run Code Online (Sandbox Code Playgroud)

我不知道" …

clojure

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