2011-11-20 13 views
6

Sau khi đọc this answer tôi đã cố gắng để chơi với tính năng này đẹp bởi bản thân mình và phát hiện ra rằng nó là ok khi tôi đang làmNhiều nhiệm vụ thông qua mô hình kết hợp với mảng không hoạt động với Vals hoa

scala> val Array(a,b,n) = "XXX,YYY,ZZZ".split(",") 
a: java.lang.String = XXX 
b: java.lang.String = YYY 
n: java.lang.String = ZZZ 

Nhưng không ổn với chữ hoa có tên biến:

scala> val Array(a,b,N) = "XXX,YYY,ZZZ".split(",") 
<console>:9: error: not found: value N 
     val Array(a,b,N) = "XXX,YYY,ZZZ".split(",") 

Lý do của hành vi đó là gì?

UPD Trên thực tế, điều tương tự với các bộ assigment:

scala> val (a,b,N) = (1,2,3) 
<console>:9: error: not found: value N 
     val (a,b,N) = (1,2,3) 

Trả lời

10

Scala đối xử với nó như là một hằng số dựa vào đó để phù hợp với mô hình. Quan sát:

scala> val N = 20 
N: Int = 20 

scala> val Array(a, b, N) = Array(11, 23, 20) 
a: Int = 11 
b: Int = 23 

scala> val Array(a, b, N) = Array(11, 23, 21) 
scala.MatchError: [[email protected] (of class [I) 
     at .<init>(<console>:75) 
     at .<clinit>(<console>) 
     at .<init>(<console>:11) 
     at .<clinit>(<console>) 
     at $print(<console>) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704) 
     at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920) 
     at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43) 
     at scala.tools.nsc.io.package$$anon$2.run(package.scala:25) 
     at java.lang.Thread.run(Thread.java:662) 

Các biến mà bạn muốn trích xuất các giá trị phải bắt đầu bằng chữ cái-chữ thường.

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