Tôi đang làm việc thông qua Scala của Cay Horstmann cho cuốn sách Thiếu kiên nhẫn nơi tôi bắt gặp cách cập nhật bản đồ có thể thay đổi này.Cú pháp cập nhật Bản đồ [map (key) = newValue] của Scala có thể thay đổi như thế nào?
scala> val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
scores: scala.collection.mutable.Map[String,Int] = Map(Bob -> 3, Alice -> 10, Cindy -> 8)
scala> scores("Alice") // retrieve the value of type Int
res2: Int = 10
scala> scores("Alice") = 5 // Update the Alice value to 5
scala> scores("Alice")
res4: Int = 5
Dường như scores("Alice")
hits apply
trong MapLike.scala
. Nhưng điều này chỉ trả về giá trị, không phải cái gì có thể được cập nhật.
Ra khỏi tò mò Tôi đã thử các cú pháp tương tự trên bản đồ bất biến và đã được trình bày với các lỗi sau,
scala> val immutableScores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
immutableScores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 10, Bob -> 3, Cindy -> 8)
scala> immutableScores("Alice") = 5
<console>:9: error: value update is not a member of scala.collection.immutable.Map[String,Int]
immutableScores("Alice") = 5
^
Trên cơ sở đó, tôi giả định rằng scores("Alice") = 5
được chuyển thành scores update ("Alice", 5)
nhưng tôi không có ý tưởng cách nó hoạt động, hoặc làm thế nào nó thậm chí có thể.
Tính năng này hoạt động như thế nào?
Tôi tin rằng đó chỉ là đường thực tiễn. Không có một số bài học cơ bản sâu xa ở đây theo như tôi hiểu. – placeybordeaux
Như bạn có thể thấy, phương thức 'update' được gọi, không phải phương thức' apply'. –
có nghĩa là bất biến ** Chỉ đọc ** và các phương tiện có thể thay đổi ** Đọc/Ghi ** để vấn đề được araised –