2011-11-20 6 views
6

Después de leer this answer He tratado de jugar con esta característica interesante por mí y averiguó que está bien cuando estoy hagoLa asignación múltiple a través de coincidencia de patrones con la matriz no está trabajando con mayúsculas Vals

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 

Pero no está bien con la variable con mayúscula llamada:

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(",") 

¿Cuál es el motivo de tal comportamiento?

UPD En realidad, lo mismo con tuplas assigment:

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

Respuesta

10

Scala trata como una constante contra el cual para que coincida con el patrón. Observe:

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) 

Las variables en las que se desea extraer los valores debe comenzar con una letra minúscula.

Cuestiones relacionadas