Clojure有一种方便的方法来查看REPL中函数的定义.Elixir REPL中有一个吗?
我有一张简单的地图:
(def my-map
{[1 2 3] 1
[1 2 4] 5
[3 4 2] 3
[4 5 3] 3
[5 2 5] 6
[9 2 1] 5
[8 3 1] 6})
Run Code Online (Sandbox Code Playgroud)
我用来执行查找.然而,这表现得相当糟糕:
(time (doseq [x (range 500)]
(my-map [1 2 8])))
"Elapsed time: 170 msecs"
Run Code Online (Sandbox Code Playgroud)
在同一台机器上,Clojure可以在大约236毫秒内完成500,000,或者大约700倍.虽然Clojure比ClojureScript更快并不出人意料,但我很困惑为什么ClojureScript会慢得多.
关于如何在ClojureScript中以高效且可读的方式制作简单的多值查找地图的任何想法?我知道做一堆if
s而不是使用矢量键解决方案肯定会更快,但我正在寻找一些更具可读性/可维护性的东西.
只是为了更新更多信息.以上是在Firefox中完成的,因此比V8慢.下列:
(def my-map2
(into cljs.core.PersistentHashMap/EMPTY
{[1 2 3] 1
[1 2 4] 5
[3 4 2] 3
[4 5 3] 3
[5 2 5] 6
[9 2 1] 5
[8 3 …
Run Code Online (Sandbox Code Playgroud) 我可以使用下载leiningen和所有相关内容的完整下载吗?我无法更改本地网络上的代理设置,这是我得到的错误:
带有"2"参数的"DownloadFile":"远程服务器返回错误:(407)需要代理验证."
您需要下载Leiningen独立jar,然后将LEIN_JAR指向它:
set LEIN_JAR=full path to leiningen standalone jar
Run Code Online (Sandbox Code Playgroud) 有没有办法通过实现 IDeref 在 cljs 中创建另一个容器,就像在 clojure 中一样?
(reify clojure.lang.IDeref
(deref [_] ...))
Run Code Online (Sandbox Code Playgroud)
编译器警告 IDeref 不是协议
我偶然发现了"examples/mixins"下的官方Om示例,其定义如下:
(def MyComponent (let [obj (om/specify-state-methods! (clj->js om/pure-methods))]
(aset obj "mixins" #js [TestMixin])
(js/React.createClass obj)))
Run Code Online (Sandbox Code Playgroud)
"#js"是什么意思?当它以这种方式使用时,我找不到符号"#"的任何Clojure文档.
我开始使用clojurescript并将lein-cljsbuild添加到我的project.clj:
(defproject hello-world "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.4.0"]
[org.clojure/clojurescript "0.0-1450"]]
:plugins [[lein-cljsbuild "1.0.3"]]
:cljsbuild {:builds []})
Run Code Online (Sandbox Code Playgroud)
当我在PowerShell和命令窗口中运行以下命令时:
lein trampoline cljsbuild repl-rhino
Run Code Online (Sandbox Code Playgroud)
我一直收到以下错误:
(Retrieving cljsbuild/cljsbuild/0.2.7/cljsbuild-0.2.7.jar from clojars)
Exception in thread "main" org.mozilla.javascript.EcmaError: ReferenceError: "goog" is not defined. (bootjs#1),
compiling:(C:\Users\Karthik\AppData\Local\Temp\form-init8943880809592678534.clj:1:127)
Run Code Online (Sandbox Code Playgroud)
我还需要做什么?上面的步骤在ClojureScript:Up and Running一书中概述,但对于lein-cljsbuild"0.2.7"
我想保存格式良好的Clojure代码.Eclipse可以在每次保存文件时格式化代码.在Light Table中拥有相同的内容会很不错.手动,我可以通过选择全部(ctrl+ a)然后运行(ctrl+ space)来实现Editor: Smart indent line(s)
.有没有办法在每次保存文件时自动执行此操作?
所以我在窗户上安装了Leiningen和git.但是git bash似乎没有找到lein命令,因为它基于.bat文件.它适用于Windows命令行.有没有办法让lein命令在git bash中工作?
Clojure有一个很好的函数叫做分区,它可以处理序列.它将给定的序列分成一系列同样长的列表.第一个参数指定fragaments的长度.第二个参数是一个偏移量,它指定片段的下一个开始.
(partition 3 1 (range 5))
;;=> ((0 1 2) (1 2 3) (2 3 4))
(partition 4 6 (range 20))
;;=> ((0 1 2 3) (6 7 8 9) (12 13 14 15))
(partition 4 3 (range 20))
;;=> ((0 1 2 3) (3 4 5 6) (6 7 8 9) (9 10 11 12) (12 13 14 15) (15 16 17 18))
Run Code Online (Sandbox Code Playgroud)
https://clojuredocs.org/clojure.core/partition
我正在寻找F#中的等效函数.显然,List.partition还有其他功能(https://msdn.microsoft.com/en-us/library/ee353782.aspx).也许有一个图书馆提供这样的功能?
我是leiningen的新手.
当我试图执行以下时,
$ lein clean jar
Run Code Online (Sandbox Code Playgroud)
我有
Wrong number of arguments to clean task.
Expected []
$
Run Code Online (Sandbox Code Playgroud)
如何在一个命令中执行多个任务?