Bạn biết cảnh đó trong số Tạm biệt và cảm ơn tất cả các cá nơi mà Arthur rất vui mừng, anh dừng một người phục vụ và yêu cầu biết, "Tại sao thức ăn này lại ngon thế?" Tôi đang ở trong tình huống đó. Scala dường như đang làm chính xác những gì tôi muốn, nhưng tôi không hiểu nó làm như thế nào. Hãy xem xét những điều sau đây:Làm cách nào để sửa đổi danh sách Nil?
scala> var v = Nil:List[String];
v: List[String] = List()
scala> v.length
res38: Int = 0
scala> v ::= "Hello"
scala> v.length
res39: Int = 1
scala> Nil.length
res40: Int = 0
Đó chính xác là những gì bạn mong đợi, nhưng nó diễn ra như thế nào?
Nil là một đối tượng mở rộng Danh sách [Không có gì], là loại phụ của Danh sách [Chuỗi], do đó, bài tập hoạt động tốt, nhưng đó là danh sách không thể thay đổi, phải không? Vì vậy, tôi không nên để có thể gắn thêm vào nó. Nhưng tôi có thể gắn thêm vào nó, hoặc ít nhất tôi có thể nối thêm vào v, mà tôi đã nghĩ đến Nil. v được thay đổi, nhưng Nil thì không.
Vì vậy, WTF? Liệu Scala có một số ngữ nghĩa sao chép sửa đổi thông minh mà tôi không biết? Nil có thực sự là một hàm trả về các danh sách trống không? Hơn nữa, có cách nào tôi có thể làm cho REPL trả lời những câu hỏi này không?