6

私は重度の JavaScript のバックグラウンドから来て、clojure を学んでいます。

js でできること。

var aVariable; //evaluates as falsy
var x = aVariable || 'my Default String';

これを clojure でどのように行うのですか?

現在、compojure からのリクエスト マップからヘッダーを読み取っています。

(let [x-forwarded-for (get-in request [:headers "x-forwarded-for"])]
    (println x-forwarded-for)
)

「x-forwarded-for」ヘッダーが存在しない場合、x-forwarded-for 値は nil です。nil をテストしてから x-forwarded-for を別の値に再割り当てする適切な方法は何ですか?

4

3 に答える 3

11

組み込みを使用できますor

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

最初の句が の場合、nil2 番目の句が使用されます。

于 2013-09-05T18:30:07.870 に答える
7

幸いなことに、このget-in関数にはnot-foundまさにこのユース ケースのパラメーターがあります。

(let [x-forwarded-for (get-in request [:headers "x-forwarded-for"]
                              "default value")]
    (println x-forwarded-for))

or一般的に、 @prismofeverything が言ったように使用できます。

于 2013-09-05T18:33:15.030 に答える
3

fnil はこのために設計されました

user> ((fnil println "hello") nil)
hello
nil
user> ((fnil println "hello") "world")
world
nil
user> ((fnil println "hello") false)
false
nil
于 2013-09-05T21:03:38.090 に答える