我不清楚所有这些读字符串函数之间的关系.好吧,很明显clojure.core/read-string
可以读取由pr[n]
或甚至输出的任何序列化字符串print-dup
.很明显,clojure.edn/read-string
读取根据EDN规范格式化的字符串.
但是,我从Clojure脚本开始,并不清楚是否cljs.reader/read-string
遵守.这个问题是由于我有一个Web服务正在发出以这种方式序列化的clojure代码:
(with-out-str (binding [*print-dup* true] (prn tags)))
Run Code Online (Sandbox Code Playgroud)
那就是产生包含数据类型的对象序列化.但是,这是不可读的cljs.reader/read-string
.我总是得到这种类型的错误:
Could not find tag parser for = in ("inst" "uuid" "queue" "js") Format should have been EDN (default)
Run Code Online (Sandbox Code Playgroud)
起初,我认为这个错误被抛出cljs-ajax
但是在测试了cljs.reader/read-string
一个rhino REPL后,我得到了同样的错误,这意味着它cljs.reader/read-string
本身就被抛出了.它是由maybe-read-tagged-type
函数引发的,cljs.reader
但不清楚这是因为读者只能使用EDN数据,还是......?
The read and read-string functions are located in the cljs.reader namespace
Run Code Online (Sandbox Code Playgroud)
这表明他们应该完全具有相同的行为.
我有一个Web服务端点,它使用来自Java库的可变资源.该Web服务端点可以同时接收多个查询.(端点使用Ring/Compojure实现).创建这些资源成本很高,因此为每个Web服务调用重新创建它们实际上是低效的.
我想要做的是创建一个pool
我在Web服务启动时填充的资源.然后,每次调用端点时,它都会从池中获取资源,将其用于处理,然后将其推回池中并等待下一次调用.
我想知道在Clojure中最好的方法是什么?是否有一个"池"Clojure库可以帮助我吗?
我天真地尝试使用原子中的向量来实现它,其中向量的每个项目都是该资源.然而,它很快就了解到它无法以这种方式真正发挥作用.
我正在尝试正确配置emacs来编写我的Clojure代码.我将这些Emacs配置基于这篇好文章.
但是,我确实更改了一些设置,比如他正在使用的主题等.我一直在检查自动完成(Eldoc?我不确定)在Clojure中显示函数的文档字符串,以及我自己的代码.
我想看一下截图中的文档:
但是,我无法显示"黄色"文档框.我不确定这是否是由于我的.emacs
文件配置错误,或者是否是我必须使用的命令或...
这是我的.emacs
档案:
(add-to-list 'custom-theme-load-path "~/.emacs.d/lib/noctilux-theme")
(require 'package):
(add-to-list 'package-archives
'("marmalade" . "http://marmalade-repo.org/packages/")
'("melpa" . "http://melpa.milkbox.net/packages/"))
;; Initialize all the ELPA packages (what is installed using the packages commands)
(package-initialize)
;; Set bigger fonts
(set-default-font "Courier New-13")
;; Setup to have a french keyboard layout working
(require 'iso-transl)
;; Show parenthesis mode
(show-paren-mode 1)
;; rainbow delimiters
(global-rainbow-delimiters-mode)
;; paredit
(add-hook 'clojure-mode-hook 'paredit-mode)
(add-hook 'nrepl-mode-hook 'paredit-mode)
(global-set-key [f7] 'paredit-mode)
;; theme
(load-theme …
Run Code Online (Sandbox Code Playgroud) 我想让Leiningen和Cygwin一起工作.
我认为我遇到的一个问题是我在"C:\ Program Files\Java ..."目录中安装了Java.这个空间似乎引起了问题.
当我尝试在Cygwin中运行lein脚本时,我收到以下错误:
./lein: line 325: C:\Program Files\Java\jdk1.8.0_05\bin\java.exe : command not found
Run Code Online (Sandbox Code Playgroud)
然后我认为这个问题就是空间.所以我改变了第325行:
"$LEIN_JAVA_CMD" \
Run Code Online (Sandbox Code Playgroud)
到(用于测试目的):
"$'C:\\\Program Files\\\Java\\\jdk1.8.0_05\\\bin\\\java.exe'" \
Run Code Online (Sandbox Code Playgroud)
但是,我仍然收到此错误:
./lein: line 325: $'C:\\Program Files\\Java\\jdk1.8.0_05\\bin\\java.exe' : commande introuvable
Run Code Online (Sandbox Code Playgroud)
但是,这个文件显然存在:
Owner@Owner-PC ~
$ ls -alh $'C:\\Program Files\\Java\\jdk1.8.0_05\\bin\\java.exe'
-rwxr-xr-x 1 Owner None 187K 8 mai 15:39 C:\Program Files\Java\jdk1.8.0_05\bin\java.exe
Run Code Online (Sandbox Code Playgroud)
该lein
脚本似乎正在为Cygwin正确配置Leiningen,但我无法让它工作.
请注意,我之前在 Cygwin 之外安装了Leiningen (我在Windows的普通shell中运行它).
我的设置,任何想法可能有什么问题?
免责声明:我今天开始使用elisp进行攻击.
我真的很想知道我得到了以下错误:
Symbol's value as variable is void: response
Run Code Online (Sandbox Code Playgroud)
使用以下代码:
(let* ((response (cons 'dict nil)))
(nrepl-request:eval
code
(lambda (resp)
(print resp (get-buffer "*sub-process*"))
(nrepl--merge response resp))
(cider-current-connection)
(cider-current-session)))
Run Code Online (Sandbox Code Playgroud)
我的理解是,当从lambda函数调用时response
,在let*
子句的范围内......但显然它不是.
所以我有点迷失为什么我得到这个错误以及我应该怎么做.
在命名空间中,我定义了两个vars(以及其他)是map:
(declare bar)
(def foo {:is-related-to bar})
(def bar {:is-related-to foo})
Run Code Online (Sandbox Code Playgroud)
因为bar
我定义时不存在foo
,所以我正在使用它进行声明(declare bar)
.
到目前为止没有问题,一切都在REPL中按预期工作.
我们唯一注意到的是,当我检查foo
REPL时,我发现它bar
是未绑定的,我认为可以通过以下方式使用declare
:
#<Unbound Unbound: #'user/bar>
Run Code Online (Sandbox Code Playgroud)
当我尝试用lein jar
或编译软件时出现问题lein ring war
(因为它是一个Ring应用程序).我从编译器得到的错误是:
Exception in thread "main" java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: Unbound: #'user/bar, compiling...
Run Code Online (Sandbox Code Playgroud)
我认为这也是预料之中的,因为我认为编译器不能处理未绑定的变量.
在任何情况下,如果要预期所有这些行为,如果无法编译,为什么人们使用前向声明?我可能在这里遗漏了一些东西.
我遇到了问题(:refer-clojure :exclude [read])
.我的设置如下:
我有一个文件foo.clj
是:
(ns foo.core)
(load "foo_bar")
Run Code Online (Sandbox Code Playgroud)
然后我有一个文件bar.clj
是:
(ns foo.core
(:refer-clojure :exclude [read]))
(defn read [])
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我确实在多个文件中拆分了命名空间.这就是为什么我(load)
在foo.clj
文件中有一系列语句是入口点.
问题是,当我编译这个文件时,我仍然得到一个着名的错误:
警告:read已经引用:#'clojure.core /在命名空间中读取:clj-osf.crud,替换为:#'clj-osf.crud/read
我不认为这会是一个很大的问题,但问题是,当我从另一个应用程序使用该库时,其他应用程序将无法编译并告诉我什么foo.core/read
根本不存在.
我也尝试改变foo.clj
:
(ns foo.core
(:refer-clojure :exclude [read]))
(load "foo_bar")
Run Code Online (Sandbox Code Playgroud)
但同样的问题也会发生.这是Clojure中的错误,还是我错过了什么?
我正在使用Clojure 1.6
我试图从输入创建一种恢复索引map
.我得到的输入图是:
{"id-1" {"values" ["a" "b" "c"]}, "id-2" {"values" ["a" "b" "c"]}}
Run Code Online (Sandbox Code Playgroud)
然后我希望将此其他地图作为结果:
{"a" ["id-1" "id-2"], "b" ["id-1" "id-2"], "c" ["id-1" "id-2"]}
Run Code Online (Sandbox Code Playgroud)
但是,我认为我的思绪确实发疯了,而且我认为自己已经把自己画成了角落而没有开箱即用.这是我到目前为止所得到的,它看起来很臭:
(->> {"id-1" {"values" ["a" "b" "c"]} "id-2" {"values" ["a" "b" "c"]}}
(map #(->> (get (second %) "values")
(map (fn [x y] (hash-map y x)) (into [] (repeat (count (get (second %) "values")) (first %))))
(apply merge-with concat)))
(apply merge-with concat))
Run Code Online (Sandbox Code Playgroud)
基本上,我使用第一个map
用于"迭代"我的所有输入值.然后我使用第二个地图创建一系列看起来像这样的单独地图:
({"a" "id-2"} {"b" "id-2"} {"c" "id-2"} {"a" "id-1"} {"b" "id-1"} {"c" "id-1"})
Run Code Online (Sandbox Code Playgroud)
为了获得该地图,我创建了一个中间数组 …
我正在尝试编写一个将地图作为输入的宏,并引用该地图中存在的每个符号(键和值).
这是我想做的.假设我有一个宏quote-everything
,它将这样的地图作为输入:
{foo "foo" :bar bar}
Run Code Online (Sandbox Code Playgroud)
然后,评估:
(quote-everything {foo "foo" :bar bar})
Run Code Online (Sandbox Code Playgroud)
会产生:
{quote(foo) "foo" :bar quote(bar)}
Run Code Online (Sandbox Code Playgroud)
基本上,我希望宏生成一个新的地图,其中引用每个符号.问题是我不知道从哪里开始,如果有可能的话.问题是地图可以是任何东西,宏也应该支持嵌套地图.
可以使用来完成符号的检测symbol?
.但是,为了支持嵌套映射,宏可能应该调用自己.但我不知道应该如何使用这样的宏创建新地图.
任何指针将不胜感激.