我正在尝试在Clojure中编写一个http文件下载器,在我的其他一个问题中,有人评论说使用专用的http客户端库比使用Clojure和Java自己的api编写代码更好.我做了一些研究并发现了一些,但我无法弄清楚每个的功能,优点和缺点.因此,如果某人可以解释他们的不同之处以及哪一个与我的项目很匹配,那将非常感激.:-D
最初使用Java的库以及相应的Clojure包装器:
Apache HttpClient及其Clojure包装器clj-http
Apache HttpAsyncClient并没有找到任何Clojure包装器.
Async Http Client及其Clojure包装器http.async.client
最后但并非最不重要的,一个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的新手,仍在学习它.:-)
关于"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,其键值对是索引值对?
ssh -D some-port-number remote-server-url.socks5://localhost:that-port-number-metioned-above)。那么这些概念—— SOCKS5 proxying, ssh tunneling,是如何相互reverse ssh tunneling关联的?
在官方的Python 2教程中,它说:
请注意,当从a_package导入an_item使用时,该项可以是包的子模块(或子包),也可以是包中定义的其他名称,如函数,类或变量.
那么如果a_package有一个名为的子包an_item,一个名为的变量an_item和一个an_item同时命名的模块呢?什么是优先事项?我做了一个实验,结果表明优先级variable> subpackage> submodule,但我不知道这是否是Python导入功能如下在所有情况下的规范秩序.
在这段代码中,
(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做了什么?有更好的理解方法吗?
我正在阅读Volkmann的Clojure教程,在该教程中它说函数print-str将内容打印到返回的字符串.这是否意味着:
(print-str a b c ... ) == (str a " " b " " c " " ... )
我尝试使用我的REPL,它表现得像我上面假设的那样,但我只是想知道它是不是真的,或者我在这里遗漏了一些东西......
我想配置Lein,以便我看到一个彩色的REPL,就像Emacs的nREPL一样.我怎样才能做到这一点?
我在Google上找不到任何帮助.我是否需要先学习Bash脚本?
在我当前的工作目录中~/WD有一个abc.txt文件.现在我想abc.txt在子目录下创建另一个~/WD/NEW/.当我输入C-x C-f和目录时~/WD/NEW/abc.txt,ido正在将字符串更改为~/WD/abc.txt,这不是我想要打开的.当我尝试修改字符串时,ido会自动将我的输入"纠正"为错误的字符串.
有什么方法可以解决这个问题吗?
我随机阅读了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)
这样做有什么理由吗?
我很好奇,所以我检查了交换的源代码!在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)
我不知道" …