我有点懊恼,一些内置的Clojure函数在我看来是一种不一致的行为。
我正在尝试这样做:
(let [kwns (namespace (keyword v))]
...)
在v可能为nil
的上下文中。 keyword
函数按照我的预期工作(返回nil
),但命名空间会抛出NPE。
我的印象是monad并不常用于Clojure,因为nil-punning似乎是惯用的形式(正如this article所进行的那样)。
我预计kwns会出现零,而不是抛出NPE。当这种不一致引起丑陋的头脑时,保持代码清洁的推荐方法是什么......对我的代码进行nil
检查是而不是我想要的答案,当然
答案 0 :(得分:10)
some->
会为你效力吗?
user=> (doc some->)
-------------------------
clojure.core/some->
([expr & forms])
Macro
When expr is not nil, threads it into the first form (via ->),
and when that result is not nil, through the next etc
nil
user=> (some-> nil keyword namespace)
nil
user=> (some-> "user/a" keyword namespace)
"user"