Нет такой проблемы с передачей значений вне области, как вы упомянули.Привязка cols
действует только в пределах области действия, но время жизни значения (:ks cols)
аналогичным образом не ограничивается.(Вот почему у вас есть сборка мусора: вы можете возвращать значения, которые указывают на данные, и данные остаются в живых, пока есть ссылки на них.)
Если вы получаете nil из функции, это, вероятно, означает, чтоcols
не имеет ключа :ks
... или действительно не может быть картой.Поскольку cols
является результатом filter
, это последовательность, и когда ключевое слово :ks
используется в качестве функции, оно возвращает ноль для не-коллекций.Для защиты от ошибок такого рода может быть полезным соглашение всегда писать (cols :ks)
вместо (:ks cols)
, чтобы вы получили ошибку, когда то, что вы считаете картой, является чем-то другим.