在scala中发出`object Foo {val 1 = 2}`
发布时间:2020-12-16 19:21:19 所属栏目:安全 来源:网络整理
导读:我发现了 scala这个问题: https://issues.scala-lang.org/browse/SI-4939 似乎我们可以定义一个名称为数字的方法: scala object Foo { val 1 = 2 }defined module Foo 但我们无法援引它: scala Foo.1console:1: error: ';' expected but double literal f
我发现了
scala这个问题:
https://issues.scala-lang.org/browse/SI-4939
似乎我们可以定义一个名称为数字的方法: scala> object Foo { val 1 = 2 } defined module Foo 但我们无法援引它: scala> Foo.1 <console>:1: error: ';' expected but double literal found. Foo.1 我们可以在对象中调用它: scala> object O { val 1 = 1; def x = 1 } defined module O scala> O.x res1: Int = 1 以下将抛出错误: scala> object O { val 1 = 2; def x = 1 } defined module O scala> O.x scala.MatchError: 2 at O$.<init>(<console>:5) at O$.<clinit>(<console>) at .<init>(<console>:7) at .<clinit>(<console>) at RequestResult$.<init>(<console>:9) 我使用scalac -Xprint:typer来查看代码,val 1 = 2部分是: <synthetic> private[this] val x$1: Unit = (2: Int(2) @unchecked) match { case 1 => () } 从中,我们可以看到方法名称已更改为x $1,并且只能在该对象内调用. 该问题的解决方案是:不会修复 我想知道是否有任何理由允许数字作为方法的名称?有什么情况我们需要使用“数字”方法吗? 解决方法
此处没有绑定名称“1”. val 1 = 2是模式匹配表达式,与val(x,2)=(1,2)将x绑定为1的方式大致相同(如果第二个元素不相同,则会抛出MatchError).这是允许的,因为没有真正的理由来添加特殊情况来禁止它;这种方式val模式匹配(几乎)与匹配模式匹配完全相同.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读