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

scala – 意想不到的特质行为

发布时间:2020-12-16 09:36:43 所属栏目:安全 来源:网络整理
导读:给定一个简单的父代数据类型: scala sealed trait Parentdefined trait Parentscala case object Boy extends Parentdefined object Boyscala case object Girl extends Parentdefined object Girl 我定义了一个特质: scala trait HasGirl { | val x: Girl
给定一个简单的父代数据类型:

scala> sealed trait Parent
defined trait Parent

scala> case object Boy extends Parent
defined object Boy

scala> case object Girl extends Parent
defined object Girl

我定义了一个特质:

scala> trait HasGirl { 
     |   val x: Girl.type
     | }
defined trait HasGirl

然后,我创建了一个实现了HasGirl的case类,但提供了一个x值为Boy.type。

scala> case class Thing(x: Boy.type) extends HasGirl
defined class Thing

我曾经期待过一个编译时错误,因为我没有看到一个类型Boy.type的x符合val x:Girl.type。

这里发生了什么?

解决方法

没有成员的单例类型似乎在这里是类似的。也许这是一个错误(你提交了一张票)。例如,以下产生运行时错误:

sealed trait Parent
case object Boy  extends Parent
case object Girl extends Parent

trait HasGirl {
  val x: Girl.type
}

case class Thing(x: Boy.type) extends HasGirl {
  def y: Girl.type = (this: HasGirl).x
}


val t = Thing(Boy)
t.y   // ClassCastException !

如果我添加一个成员,你会得到一个编译时错误:

sealed trait Parent
case object Boy  extends Parent
case object Girl extends Parent { def hello = 1234 }

trait HasGirl {
  val x: Girl.type
}

case class Thing(x: Boy.type) extends HasGirl

06002

(编辑:李大同)

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

    推荐文章
      热点阅读