Clojure开发人员犯了哪些常见错误,我们如何避免这些错误呢?
例如; Clojure的新人认为这个contains?
功能的作用是一样的java.util.Collection#contains
.但是,contains?
只有在使用索引集合(如地图和集合)并且您正在寻找给定键时,它才会起作用:
(contains? {:a 1 :b 2} :b)
;=> true
(contains? {:a 1 :b 2} 2)
;=> false
(contains? #{:a 1 :b 2} :b)
;=> true
Run Code Online (Sandbox Code Playgroud)
与数字索引集合(向量,数组)一起使用时,contains?
仅检查给定元素是否在有效索引范围内(从零开始):
(contains? [1 2 3 4] 4)
;=> false
(contains? [1 2 3 4] 0)
;=> true
Run Code Online (Sandbox Code Playgroud)
如果给出一个列表,contains?
将永远不会返回true.
数组语言环境虽然令人着迷,却令人困惑.是否有理由选择J或K或APL或A中的一个?这些选项似乎都不是开源的 - 是否有开源版本?我很想扩大我的想法,但我仍然感到困惑.
McCarthy的原始Lisp和其他一些化身之后没有像我们现在在Common Lisp,Clojure,Scheme等中拥有的宏设施......我知道.
然而,我不清楚到底是如何形成宏的,首先是它们有什么实现,以及它们的动机是什么.如果您愿意,可以参考论文和来源.
我意识到它们是用来解决不同问题的不同的野兽,但我想要一个列举的Erlang优于node.js的列表(反之亦然).你什么时候用一个而不是另一个?
我在同事的Bash脚本中看到了tar的以下有趣用法:
`tar cf - * | (cd <dest> ; tar xf - )`
Run Code Online (Sandbox Code Playgroud)
显然它的工作方式与rsync -av相似,但速度更快.问题出现了,怎么样?
-m
编辑:任何人都可以解释为什么这个解决方案优于以下?
cp -rfp * dest
Run Code Online (Sandbox Code Playgroud)
前者更快吗?
我很简单地需要在Clojure中使用Ruby类.复杂的因素是该类是在宝石中提供的.最佳方法是按照以下方式设置我的Leiningein项目文件:
(project foo ""
...
:dependencies [[clojure ...]
[jruby ... ]])
Run Code Online (Sandbox Code Playgroud)
同样,我更愿意只检查gem及其依赖项到本地repo目录中.因此,从我理想的用法是:
(ns bar.baz
(require [jruby.something :as jruby])
(def obj (jruby/CreateAnInstance "TheGemClass"))
(def result (jruby/CallAMethod obj "method_name" some args))
Run Code Online (Sandbox Code Playgroud)
谢谢.
来自Clojure的背景,我认为它的前/后条件作为合同设计的基础:
;; sqr.clj
(defn sqr [n]
{:pre [(not= 0 n) (number? n)]
:post [(pos? %) (number? %)]}
(* n n))
(sqr 10)
;=> 100
(sqr 0)
; Assertion error
Run Code Online (Sandbox Code Playgroud)
Common Lisp中是否有类似的前/后功能和/或更全面的Design by Contract库?
谢谢
我知道Common Lisp对函数和变量有不同的绑定环境,但我相信它还有另一个绑定环境用于标签体标签.是否有比这更具约束力的环境?如果是这样,那么将Common Lisp归类为Lisp-2是否公平?
这些问题并不意味着迂腐或自行车脱落,我只想更好地了解Common Lisp,并希望能够深入了解哪里可以深入挖掘其规格.
在学习Haskell时,我在研究Kent递归计算器和SASL函数语言方面采取了一条小路(可以这么说).我立刻被他们和Haskell之间的相似性所震惊,因为他们早于它,我想知道他们是否/如何提供影响力.
关于KRC和SASL对Haskell的影响(或缺乏影响)的任何信息都将非常感激.
请原谅我的无知,但是对于(例如)node.js与ZeroMQ的高级概述是什么?
因此,互联网上有人写了大量代码并将其全部存储在github上.有一天,那个人刚刚起来,并且删除了他所有的存储库.值得庆幸的是,他的主要项目有许多分叉,但仍有许多较小的回购没有分叉.但是,我设法使用Github API定期删除所述人的回购,因此拥有所有上述"小项目"的副本.但是,有一个问题:我所拥有的是各个repo的.git目录的内容.
我不清楚如何利用这些.git dirs来有效地分叉它们,从而创建相应的repos的相当完整的镜像.
任何指导?
-m