Clojure和ClojureScript中get的不同行为

时间:2013-04-02 12:35:03

标签: clojure clojurescript

区别在于:

clj> (get 42 :anything) ; => nil
cljs> (get 42 :anything) ; =>  Error: No protocol method ILookup.-lookup defined for type number: 42

我不知道这是ClojureScript中的错误还是未记录的错误,或者我只是遗漏了一些东西。

3 个答案:

答案 0 :(得分:5)

我是ClojureScript开发人员之一。 get应该接受任何东西,ClojureScript的当前行为是一个bug。

答案 1 :(得分:4)

你在这里滥用get - 你的意思是提供地图参数吗?

,例如,

cljs> (get {} 42 :anything)
;=> :anything

在Clojure / ClojureScript中,get假定第一个参数的映射:

clj> (doc get)
-------------------------
clojure.core/get
([map key] [map key not-found])
  Returns the value mapped to key, not-found or nil if key not present.
nil

由于底层实现是如此不同,我希望看到未记录的函数使用(在这种情况下,提供数字而不是地图)导致不同的行为。

答案 2 :(得分:1)

clojure.core中的get函数与cljs.core中的函数get不同

clojure函数在map上工作(如果你没有传递map它会返回第3个参数,如果没有传递第3个参数则为nil),clojurescript函数适用于任何具有ILookup协议实现的类型< / p>