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

scala case类私有应用方法(repl bug?)

发布时间:2020-12-16 19:12:28 所属栏目:安全 来源:网络整理
导读:在 Scala2.10.0 REPL中 Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM,Java 1.7.0_13).Type in expressions to have them evaluated. Type :help for more information.scala case class A private(i:Int)defined class Ascala A(1)r
在 Scala2.10.0 REPL中

Welcome to Scala version 2.10.0 (Java HotSpot(TM) 64-Bit Server VM,Java 1.7.0_13).
Type in expressions to have them evaluated. 
Type :help for more information.

scala> case class A private(i:Int)
defined class A

scala> A(1)
res0: A = A(1)

但如果编译

$scala -version
Scala code runner version 2.10.0 -- Copyright 2002-2012,LAMP/EPFL
$cat Main.scala 
package foo

case class A private (i:Int)

object Main extends App{
  println(A(1))
}

$scalac Main.scala 
Main.scala:6: error: constructor A in class A cannot be accessed in object Main
  println(A(1))
          ^
one error found

A.apply(1)是编译错误.

这个Scala2.10.0 REPL错误?

FYI Scala2.9.2 REPL如下

Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM,Java 1.7.0_13).
Type in expressions to have them evaluated.
Type :help for more information.

scala> case class A private(i:Int)
defined class A

scala> A(1)
<console>:10: error: constructor A in class A cannot be accessed in object $iw
              A(1)
              ^

解决方法

这肯定看起来像REPL错误.

请注意,构造函数被正确标记为私有(换句话说,新的A(1)不会按预期编译),它只是工厂(A.apply)错误地公开.

(编辑:李大同)

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

    推荐文章
      热点阅读