如果在Clojure中当前值为nil,如何分配默认值?

Geu*_*uis 6 clojure

我来自沉重的javascript背景和学习clojure.

在js我们可以做;

var aVariable; //evaluates as falsy
var x = aVariable || 'my Default String';
Run Code Online (Sandbox Code Playgroud)

你怎么在clojure中这样做?

目前我正在阅读来自compojure的请求地图中的标题.

(let [x-forwarded-for (get-in request [:headers "x-forwarded-for"])]
    (println x-forwarded-for)
)
Run Code Online (Sandbox Code Playgroud)

在'x-forwarded-for'标头不存在的情况下,x-forwarded-for值为nil.测试nil然后将x-forwarded-for重新分配给另一个值的正确方法是什么?

pri*_*ing 11

你可以使用内置的or:

(let [x-forwarded-for (or (get-in request [:headers "x-forwarded-for"]) "my Default String")]
  (println x-forwarded-for))
Run Code Online (Sandbox Code Playgroud)

如果是第一个子句nil,它将使用第二个.


bde*_*ham 7

幸运的是,该get-in函数具有not-found完全针对此用例参数:

(let [x-forwarded-for (get-in request [:headers "x-forwarded-for"]
                              "default value")]
    (println x-forwarded-for))
Run Code Online (Sandbox Code Playgroud)

一般来说,你可以使用or@prismofeverything说.