2011-04-05 29 views

Trả lời

12

Rất đáng xem Rich Hickey's fantastic video on identity and state.

Bản ghi được thiết kế là không thay đổi và lưu trữ trạng thái của giá trị nào đó.

Để mô hình trạng thái của một thực thể thay đổi, tôi khuyên bạn nên sử dụng giá trị ref đề cập đến giá trị bất biến đại diện cho trạng thái hiện tại. Bạn có thể sử dụng các bản ghi cho trạng thái bất biến, nhưng thường đơn giản hơn là chỉ sử dụng một bản đồ đơn giản.

Một ví dụ đơn giản, nơi mà các nhà nước có thể thay đổi là một bảng điểm cho một trò chơi:

; set up map of current scores for each player 
(def scores 
    (ref 
    {:mary 0 
    :joe 0 })) 

; create a function that increments scores as a side effect 
(defn add-score [player amount] 
    (dosync 
    (alter scores update-in [player] + amount))) 

; add some scores 
(add-score :mary (rand-int 10)) 
(add-score :joe (rand-int 10)) 

; read the scores 
@scores 
=> {:mary 6, :joe 1} 
+2

Cả hai thay đổi và cập nhật tự động truyền theo bất kỳ đối số nào họ không hiểu, vì vậy điều này có thể chính xác hơn (và dễ đọc hơn) được viết dưới dạng '(thay đổi điểm cập nhật trong [trình phát] + số tiền)'. – amalloy

+0

@amalloy - cảm ơn! tốt để tìm hiểu một thủ thuật mới :-) đã cập nhật – mikera

5

Tôi đã thấy rằng tôi nhiều hơn nữa thường hồ sơ đặt trong refs hơn refs trong hồ sơ. Lời khuyên của mikira về việc sử dụng một bản đồ đơn giản nghe rất hay.

Bắt đầu với bản đồ và chuyển sang thứ gì đó ít linh hoạt hơn khi bạn phải.

Các vấn đề liên quan