om-*_*nom 6 scala pattern-matching
读完这个答案之后,我试着自己玩这个漂亮的功能,发现我做的时候还可以
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
Run Code Online (Sandbox Code Playgroud)
但是对于大写的命名变量是不行的:
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(",")
Run Code Online (Sandbox Code Playgroud)
这种行为的原因是什么?
UPD 实际上,与元组分配相同:
scala> val (a,b,N) = (1,2,3)
<console>:9: error: not found: value N
val (a,b,N) = (1,2,3)
Run Code Online (Sandbox Code Playgroud)
mis*_*tor 13
Scala将其视为与模式匹配的常量.注意:
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: [I@195d471 (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)
Run Code Online (Sandbox Code Playgroud)
要提取值的变量必须以小写字母开头.
归档时间: |
|
查看次数: |
1035 次 |
最近记录: |