Относительно вопроса, который вы на самом деле задали, я бы сказал: не делайте этого.Встраивание - это одна из вещей, которую JVM делает хорошо, и вы не должны делать свой код более сложным и менее читабельным, чтобы гарантировать, что что-то будет встроено.
Ваше первоначальное утверждение проблемы, опубликованное в комментариях, имеет многоболее чистое решение: ничего не дублируйте!Вместо того чтобы писать выражение cond
с тремя почти идентичными предложениями, используйте cond
, чтобы установить переменную для единственной изменяемой части, а затем безоговорочно выполните остальную часть тела, используя заданную вами переменную.
(let [compute (case command
"turn on" (constantly true)
"turn off" (constantly false)
"toggle" not)]
(doseq [x (range x1 (inc x2))
y (range y1 (inc y2))
:let [i (+ (* y W) x)]]
(aset lights i (compute (aget lights i)))))