当前位置: 首页 > 知识库问答 >
问题:

铸件问题

盛柏
2023-03-14
    import scala.annotation.unchecked.uncheckedVariance
    import scala.collection.immutable.Queue
    import scala.collection.mutable.ListBuffer


  abstract class Exp[+T:Manifest] { // constants/symbols (atomic)
    def tp: Manifest[T @uncheckedVariance] = manifest[T] //invariant position! but hey...
  }
  case class Sym[+T:Manifest](val id: Int) extends Exp[T] {
  }
  abstract class Def[+T] { // operations (composite)
    override final lazy val hashCode = scala.runtime.ScalaRunTime._hashCode(this.asInstanceOf[Product])
  }
  abstract class Stm
  case class TP[+T](sym: Sym[T], rhs: Def[T]) extends Stm

  abstract class Trial{
  }

  class M1() extends Trial{}
  class M2() extends Trial{}

  class N1() extends Def[M1]{}
  class N2() extends Def[M2]{}

  TP(Sym[M1]{4},new N1())

这会产生以下错误:

斯卡拉

我期待着一个TP类型的对象[试验],发生了什么?因为Sym和Def是协变类型。我错过什么了吗?

谢谢

共有1个答案

齐博厚
2023-03-14

在Scastie,它不可复制为https://scastie.scala-lang.org/tCD4HahgTqO4WTnlGcfWqQ但可指责为https://scastie.scala-lang.org/L46PWLF2S5i4d1IGoT6UuQ

在本地,只有删除定义哈希代码的懒惰代码,我才能复制ClassCastException。

协方差是不相关的。

在<代码>中。a安装[产品]您正试图将Def的转换为产品。创建新N1()时,它是当前的定义。

new N1()作为类N1的值不能转换为Products,因为N1不扩展产品

在Scala中,默认情况下,类不扩展产品,而case类扩展产品。

要修复ClassCastException,就足以使N1成为case类。

 类似资料:
  • 我对云铸造/波什非常陌生,有一套基本的问题。 1)液滴vs花园容器:我知道液滴包含源代码+构建包,这些液滴在花园容器中执行。IMHO容器很好地运送到其他系统。为什么有液滴的中间概念?他们自己的容器应该不会产生液滴吗? 2)Diego cell:Diego cell的角色是什么(我假设它的工作只是启动/停止花园容器)?Diego cell是否依赖于平台(例如。特定单元只能运行windows-gard

  • 我对SSIS非常陌生,我有现有的SQL表,我想将数据加载到十进制(10,2)列中,但是.csv文件作为源文件包含值,因此我试图使用派生列和表达式将值替换为 我已将平面文件源输出-输出列更改为 派生列输出-Columns输出设置为 SSIS接受所有这些,但在为派生列运行包时会出现错误,如下所示 [派生列[2]]错误:SSIS错误代码DTS_E_InsidedTransformFailureOnErr

  • 我有一个PWS帐户,在安装云铸造命令行界面(CLI)后,我尝试从windows命令提示符、CYGWIN终端和Gitbash登录。在上述所有情况下,我都不能通过登录 但是如果我发出命令:就可以登录,但是这个命令的问题是我在命令行上公开了我的密码。 我在windows命令提示符中尝试了同样的命令,它起作用了,我可以登录了。

  • 铸龙是一款用于分析用户行为事件的 BI 软件。 特点如下 事件分析 埋点上报 漏斗分析 留存分析 智能路径分析 报表,面板管理 多平台部署,直接二进制部署无需搭建环境 技术栈主要用 mysql redis kafka clickhouse 系统组成 该系统分为以下四部分 埋点上报sdk report_server sinker manager 埋点上报sdk: 用于采集埋点信息,目前SDK支持类型

  • 我目前在辅导一个高中生AP Java,她问了我一个关于“双选”的问题。我以前从未听说过这个术语,但显然她的老师希望她在即将到来的期末考试中知道这个术语。 她的老师提供的例子是,如果你想将一个整数转换成一个字符串,你必须执行以下操作才能避免编译器错误: 问题是:你想在现实生活中什么时候这样做? 老师只提供了导致运行时错误的示例。此外,我从来不知道有一个术语,但这样做似乎是个坏主意,因为只有当两种类型

  • 问题内容: 在Objective-C中,我经常绕过块。我经常使用它们来实现有助于避免将内容存储到实例变量中的模式,从而避免线程/定时问题。 例如,我将它们分配给过孔,以便在动画结束时执行该块。(Objective-C可以将块视为对象;您也可以这样做和。) 但是,尝试在Swift和Objective-C中同时使用这些模式似乎很困难。( 编辑: 我们可以看到该语言仍在不断变化:已经对代码进行了修改,因