Nếu bạn có một bản đồ hoặc một bộ sưu tập bản đồ và bạn muốn có thể cập nhật các giá trị của nhiều phím bằng một chức năng, cách thức thành ngữ nhất để thực hiện điều này là gì?Cập nhật giá trị của nhiều phím
=> (def m [{:a 2 :b 3} {:a 2 :b 5}])
#'user/m
=> (map #(update-in % [:a] inc) m)
({:a 3, :b 3} {:a 3, :b 5})
Thay vì lập bản đồ update-in cho mỗi phím, tôi muốn lý tưởng như một số chức năng mà hoạt động như thế này:
=> (map #(update-vals % [:a :b] inc) m)
({:a 3, :b 4} {:a 3, :b 6})
Lời khuyên nào sẽ được nhiều đánh giá cao! Tôi đang cố gắng giảm số lượng dòng trong một tập lệnh dài không cần thiết.
Rất đẹp, cảm ơn cho trả lời nhanh quá! – Giles
Tôi tự hỏi nếu có một cách để giữ cho hành vi của cập nhật-in để một khóa thiếu không ném một ngoại lệ con trỏ null. '(update-in {} [: test] (fnil inc 0)) {: test 1}' – Istvan
đây là một câu trả lời hay và làm nổi bật một số vẻ đẹp của việc học clojure (cũng là một số khó khăn trong não không lisper) – zach