Trường hợp sử dụng hiện tại của tôi khá tầm thường, Bản đồ có thể thay đổi hoặc không thay đổi sẽ thực hiện thủ thuật.Bản đồ bất biến của Scala, khi nào có thể thay đổi được?
Có một phương pháp mà phải mất một Bản đồ bất biến, mà sau đó gọi một phương thức API bên thứ 3 mà phải mất một Bản đồ bất biến cũng
def doFoo(foo: String = "default", params: Map[String, Any] = Map()) {
val newMap =
if(someCondition) params + ("foo" -> foo) else params
api.doSomething(newMap)
}
Các bản đồ trong câu hỏi thường sẽ khá nhỏ, ít nhất có thể có một danh sách nhúng của các cá thể lớp chữ hoa, một vài nghìn mục tối đa. Vì vậy, một lần nữa, giả sử ít tác động trong việc không thay đổi trong trường hợp này (tức là về cơ bản có 2 bản đồ của Bản đồ thông qua bản sao val bản đồ mới).
Tuy nhiên, nó hơi nhích tôi một chút, sao chép bản đồ chỉ để có được một bản đồ mới với một vài k-> v mục tacked vào nó.
Tôi có thể chuyển sang chế độ có thể thay đổi và params.put("bar", bar)
, v.v. cho các mục tôi muốn nhấn và sau đó params.toMap
để chuyển đổi thành không đổi cho cuộc gọi api, đó là một tùy chọn. nhưng sau đó tôi phải nhập và vượt qua các bản đồ có thể thay đổi, điều này hơi phức tạp so với việc sử dụng Bản đồ bất biến mặc định của Scala.
Vì vậy, các nguyên tắc chung cho thời điểm nào là thực tiễn hợp lý/tốt để sử dụng Bản đồ có thể thay đổi trên Bản đồ bất biến?
Cảm ơn
EDIT như vậy, có vẻ như một add hoạt động trên bản đồ bất biến mất gần thời gian liên tục, xác nhận @ DHG và @ khẳng định Nicolas rằng một bản sao đầy đủ không được thực hiện, trong đó giải quyết vấn đề cho trường hợp cụ thể được trình bày.
Xem [Cực thông minh: Cấu trúc dữ liệu chức năng trong Scala] (http://www.infoq.com/presentations/Functional-Data-Structures-in-Scala). –
cảm ơn, xem ngay bây giờ – virtualeyes