Если вы хотите, чтобы они были условно добавлены, как в примере с Java, вы можете использовать cond->
, который не замыкает накоротко:
(let [messages []]
(cond-> messages ; Conditionally thread through conj
(= 1 1) (conj "Message1")
(= 0 1) (conj "Message2")
(= 0 0) (conj "Message3")))
=> ["Message1" "Message3"]
Если вы хотите условно добавить одну или другую, какваш второй пример показывает, что вы можете просто использовать обычный conj
с некоторыми if
выражениями:
(let [messages []]
(conj messages
(if (= 1 1) "Message1" "Message2")
(if (= 0 1) "Message3" "Message4")))
=> ["Message1" "Message4"]
И я отмечу, что ваша первоначальная попытка почти сработала.Вместо vec
вы могли бы использовать vector
или просто векторный литерал:
(let [messages [(if (= 1 1) "Message1" "Message2")
(if (= 1 0) "Message3" "Message4")]]
messages)
=> ["Message1" "Message4"]
Хотя это было бы полезно только в том случае, если у вас еще не было заполнено messages
, чтоВы хотели добавить в.Если бы это было так, вы должны использовать concat
или into
:
(let [old-messages ["old stuff"]
messages [(if (= 1 1) "Message1" "Message2")
(if (= 1 0) "Message3" "Message4")]]
(into old-messages messages))
=> ["old stuff" "Message1" "Message4"]