加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala的元组展开细微差别

发布时间:2020-12-16 09:21:54 所属栏目:安全 来源:网络整理
导读:尝试将元组解开为val时,我已经注意到scala中有以下行为: scala val (A,B,C) = (1,2,3)console:5: error: not found: value A val (A,3) ^console:5: error: not found: value B val (A,3) ^console:5: error: not found: value C val (A,3) ^scala val (u,v
尝试将元组解开为val时,我已经注意到scala中有以下行为:

scala> val (A,B,C) = (1,2,3)
<console>:5: error: not found: value A
       val (A,3)
            ^
<console>:5: error: not found: value B
       val (A,3)
               ^
<console>:5: error: not found: value C
       val (A,3)
                  ^

scala> val (u,v,w) = (1,3)
u: Int = 1
v: Int = 2
w: Int = 3

这是因为scala的模式匹配机制自动地假定从模式中的首都开始的所有标识符是常量,还是由于其他原因?

谢谢!

解决方法

是的,它变得更糟:

val (i,j) : (Int,Int) = "Hello" -> "World"

以上将在运行时使用ClassCastException进行编译和失败.很容易忘记(i,j)声明是一种模式.

编辑:对于ziggystar,Scala分配规则规定在声明中:

val p = expr //or var

p可以是标识符或模式(参见Scala中编程的第15.7节,第284页).所以例如,以下是有效的:

val x :: y :: z :: rest = List(1,3,4)

将这一点与模式被擦除的事实(即参数类型信息未被检查)意味着我的原始示例将被编译.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读