Tôi đang cố gắng tạo kiểu dữ liệu/phương thức không thay đổi của riêng mình bằng defrecord
trong Clojure. Mục đích là để có một kiểu dữ liệu mà tôi có thể tạo ra các cá thể, và sau đó gọi các phương thức của nó để trả về một bản sao mới của chính nó với các biến bị biến đổi. Nói a và b là vectơ. Tôi muốn cập nhật một giá trị trong cả hai và trả về một bản sao mới của toàn bộ cấu trúc với các vectơ được cập nhật. Điều này rõ ràng không biên dịch, tôi chỉ cố gắng để có được ý tưởng của tôi trên.Từ chối của Clojure - cách sử dụng?
Tôi muốn gọi hàm tạo và sau đó trình biến đổi nhiều lần như tôi muốn (có các chức năng khác không biến đổi, nhưng tôi không muốn làm cho nó phức tạp hơn câu hỏi).
Ngoài ra, nếu đây không phải là Clojure thành ngữ, bạn phải làm như thế nào?
Tuyệt vời, cảm ơn. Có một cách dễ dàng/idiomatic để biến đổi cả hai vectơ cùng một lúc, trước khi trở về? –
hoặc assoc-in: '(assoc-in foo [: b 0] 12)' – Kevin
PGS cho phép bạn thực hiện nhiều khóa cùng lúc, ví dụ: '(assoc foo: a [7 8 9]: b [3 4 5])'. Mặc dù thông thường nếu bạn muốn thực hiện bất kỳ đột biến ưa thích/phức tạp nào khác, bạn sẽ muốn kết hợp nó trong một hàm riêng biệt (được đặt tên). – mikera