2012-10-21 22 views
8

Tôi đã gặp phải một số vấn đề hôm nay khi giao bài tập cho một trường var trong một cá thể lớp chữ được lưu trữ trong bản đồ. Đây là một phiên đơn giản trong bản trình diễn thể hiện sự cố:Không chắc chắn nhiệm vụ của tôi sẽ đi tới đâu

scala> case class X(var x: Int) 
defined class X 

scala> val m = Map('x -> X(1)) 
m: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1)) 

scala> m 
res0: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1)) 

scala> m('x).x = 7 

scala> m 
res1: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(1)) 

scala> val x = m('x) 
x: X = X(1) 

scala> x.x = 7 
x.x: Int = 7 

scala> x 
res2: X = X(7) 

scala> m 
res3: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(7)) 

scala> m('x).x_=(8) 

scala> m 
res5: scala.collection.immutable.Map[Symbol,X] = Map('x -> X(8)) 

Lần thử đầu tiên trong bài tập không có gì. Tuy nhiên, lưu trữ cá thể trong một val và sau đó thực hiện các tác vụ gán, cũng như trực tiếp gọi phương thức gán cho trường đó.

Tôi đang sử dụng Scala 2.9.2.

Nếu đây là hành vi được mong đợi, sẽ rất tuyệt nếu ai đó có thể giải thích cho tôi vì tôi dường như không thể hiểu được nó ngay bây giờ. Nếu đây là lỗi thì điều đó cũng tốt.

Dù bằng cách nào, nó cũng sẽ là thú vị để biết nơi mà đầu tiên chuyển nhượng m('x).x = 7 là đi. Tôi giả sử điều gì đó đang bị đột biến ở đâu đó —Tôi chỉ không biết điều gì đó có thể là gì.

Cập nhật: Dường như điều này chỉ xảy ra trong bản phát lại. Tôi chỉ cố gắng biên dịch mã và nhiệm vụ diễn ra như mong đợi. Vậy, repl là gì đối với nhiệm vụ của tôi?

+0

@paradigmatic chỉ đúng với các phím của bản đồ. –

+0

@mattb Tệ của tôi. Tôi xóa nhận xét của mình. – paradigmatic

Trả lời

6

Điều này có vẻ là một lỗi. Nếu một người thực thi điều này với thông báo lỗi 2.10 hàng đêm sẽ bị ném:

scala> m('x).x = 7 
<console>:10: error: ')' expected but string literal found. 
+ "m(scala.Symbol("x")).x: Int = " + `$ires0` + "\n" 
        ^

Tôi đã tạo một ticket cho việc này.

+0

Từ vé của bạn có vẻ như nó thực sự gây ra lỗi trong 2.9.2 repl là tốt, nhưng không có lỗi được hiển thị. Có đúng không? – DaoWen

+1

@DaoWen: Vâng, đó là chính xác. – sschaef

+0

Cảm ơn thông tin và cảm ơn bạn đã tạo vé! – DaoWen

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