Как и во многих вещах в Clojure, нет гарантии, потому что нет спецификации.Если его нет в строке документации, вы принимаете это на свой страх и риск, даже если в текущей версии Clojure это действительно так.
Но я бы также сказал: это не совсем то, что записи значит , философски.Поля записи должны иметь индивидуальную семантику домена, и похоже, что в вашей записи они действительно есть.Это большой сюрприз, когда такая операция, как «взять N отчетливо значимых полей этой записи и обрабатывать их все одинаково», является правильной вещью, и она заслуживает того, чтобы ее прописали, когда вы это сделаете.
Вы можете, по крайней мере, делать то, что хотите, с немного меньшей избыточностью:
(let [[h mh s ms] (for [k [:health :max-health, :satiety :max-satiety]]
(format "%.3f" (get pet k)))]
...)
Лично я бы сказал, что вы неправильно моделируете свой домен: у вас явно есть понятие «ресурса» (здоровье и сытость).) который имеет как «текущее», так и «максимальное» значение.Они заслуживают того, чтобы их можно было сгруппировать по ресурсам, например,
{:health {:current 50 :max 80}
:satiety {:current 3 :max 10}}
, и, сделав это, я бы сказал, что «набор ресурсов» питомца на самом деле представляет собой просто одно поле карты, а не N полей дляN ресурсов он содержит.Тогда весь этот вопрос упорядочения полей записей вообще не возникает.