1

私はこれを試しています:

(hash-set (when (= a 1) x))

等しい#{x}かどうか、それ以外の場合は空のセットを期待しています。しかし、空のセットの代わりに取得しています。声明を書き直す方法は?a1#{}#{nil}

ps。回避策ですが、見た目が悪いです:

(filter #(not (nil? %)) (hash-set (when (= a 1) x)))

ソリューション:

(apply hash-set (when (= a 1) (list x)))
4

3 に答える 3

1

あなたが使用することができます:

(apply hash-set (when (= a 1) x))

aとxは変数であると想定しています。たとえば、次のようになります。

(defn foo [a & x] (apply hash-set (when (= a 1) x)))

パラメータxをオプションにしました。これは、aが1に等しくない場合にパラメータを指定する必要がないためです。

于 2013-01-23T20:18:44.013 に答える
1

別の方法:

(into #{} (when (= a 1) [x]))

コード内の単語が気に入ったらhash-set、次のことができます。

(apply hash-set (when (= a 1) [x]))
于 2013-01-23T22:05:20.193 に答える
0

あなたがすることができます:

(if (= a 1) #{x} #{})
于 2013-01-23T20:20:42.347 に答える