通过与数组进行模式匹配的多重赋值不适用于大写值

发布于 2024-12-17 06:32:29 字数 712 浏览 0 评论 0原文

阅读这个答案后我尝试玩我自己使用了这个很好的功能,发现当我这样做时可以

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

,但对于大写命名变量则不行:

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

这种行为的原因是什么?

UPD 实际上,元组分配也是如此:

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

After reading this answer I've tried to play with this nice feature by myself and found out that it is ok when I'm do

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

But is not ok with uppercase named variable:

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

What is the reason of such behavior?

UPD
Actually, the same thing with tuples assigment:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痴意少年 2024-12-24 06:32:29

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)

要提取值的变量必须以小写字母开头。

Scala treats it as a constant against which to match the pattern. 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: [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)

The variables in which you want to extract the values must begin with a lower-case letter.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文