复合类型的案例类伴生对象生成错误

2024-01-30

定义的空特征测试:

trait Test

复合类型中使用什么:

scala> val a : Int with Test = 10.asInstanceOf[Int with Test]
a: Int with Test = 10

以及带有复合类型参数的案例类(如未装箱标记类型):

scala> case class Foo(a: Int with Test)
error: type mismatch;
 found   : Double
 required: AnyRef
Note: an implicit exists from scala.Double => java.lang.Double, but
methods inherited from Object are rendered ambiguous.  This is to avoid
a blanket implicit which would convert any scala.Double to any AnyRef.
You may wish to use a type ascription: `x: java.lang.Double`.

但它非常适合:

scala> case class Foo(a: List[Int] with Test)
defined class Foo

方法定义没有问题:

scala> def foo(a: Int with Test) = ???
foo: (a: Int with Test)Nothing

斯卡拉版本2.10.3

这是正常的编译器行为吗?


您遇到过 Scala 统一基元和对象的尝试失败的情况之一。自从Int在Scala中表示Java原始类型int,它不能混有任何特征。当执行 asInstanceOf 时,Scala 编译器会自动装箱Int into a java.lang.Integer:

scala> val a: Int with Test = 10.asInstanceOf[Int with Test] 
a: Int with Test = 10

scala> a.getClass
res1: Class[_ <: Int] = class java.lang.Integer

但是,声明类型时不会发生自动装箱,因此您必须手动完成:

scala> case class Foo(x: Integer with Test)
defined class Foo

但是编译器类型检查器在检查类型之前不会自动装箱:

scala> Foo(a)
<console>:12: error: type mismatch;
 found   : Int with Test
 required: Integer with Test
              Foo(a)
                  ^

所以你必须将你的变量声明为Integer with Test:

scala> val a: Integer with Test = 10.asInstanceOf[Integer with Test]
a: Integer with Test = 10

scala> Foo(a)
res3: Foo = Foo(10)

或者在调用案例类时使用强制转换:

val a : Int with Test = 10.asInstanceOf[Int with Test]
scala> a: Int with Test = 10

scala> Foo(a.asInstanceOf[Integer with Test])
res0: Foo = Foo(10)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复合类型的案例类伴生对象生成错误 的相关文章

随机推荐

  • 验证 WPF 组合框中选定的值

    就像标题所说 我正在尝试验证我的表单 但在获取组合框值时遇到问题
  • Spark DataFrame 分区器为 None

    Spark新手 创建 DataFrame 后 我尝试根据 DataFrame 中的列对其进行分区 当我使用检查分区器时data frame rdd partitioner I get None作为输出 分区使用 gt data frame
  • 在 MySQL 服务器或 PHP 中更快地随机化许多结果

    在 MySQL 服务器上随机化大量结果的排序顺序更快还是在 PHP 中收到数据后更快 有谁有任何数据可以备份 甚至是轶事经验吗 我有根据的猜测是 MySQL 毫无疑问会获胜 它就是为了以这种方式处理数据而设计的 必须将所有数据移至 PHP
  • C 中字符串中所有可能的组合

    我正在尝试使用 C 打印字符串 abc 的所有可能组合 有人可以帮助指出我在这段代码中哪里出错了吗 我正在使用这里提到的算法 http hackercs com videos Combinations of a String Part 2
  • 如何编写带有子查询作为 WHERE 子句一部分的 Django 查询?

    我正在使用 Django 和 Python 3 7 我无法弄清楚如何编写 Django 查询 其中子查询作为 where 子句的一部分 这是模型 class Article models Model objects ArticleManag
  • JQuery 文档就绪 - 允许多个吗? [复制]

    这个问题在这里已经有答案了 可能的重复 jQuery 拥有多个 document ready function 是否不好 https stackoverflow com questions 1148241 jquery is it bad
  • 我如何得到,用户在 facebook sdk 4.0.1 中登录或注销

    我正在使用 Facebook 新的 sdk 4 0 1 因为当我登录按钮更改为注销时 相同的按钮用于注销 无需任何代码 但实际上我想在注销时进行一些编码 那么我如何区分该 SDK 中的这两件事呢 我如何声明注销方法 您可以检查令牌何时更改
  • JavaScript 警报后页面重新加载/刷新 - 不希望这样做!

    我的 JavaScript 函数正在工作 但由于某种原因 在我的 IF 语句中显示警报后 页面重新加载 刷新 但我不希望它这样做 这是为什么 我怎样才能改变我的功能 使它不会这样做 我的功能 function valSubmit varNa
  • 为什么内联未命名命名空间?

    专家快速介绍 C 11 允许声明未命名的命名空间inline 这对我来说似乎是多余的 在未命名命名空间中声明的内容已经被使用 就像它们在封闭命名空间中声明一样 所以我的问题是 这是什么意思 inline namespace anonymou
  • 无需 APNS 从服务器到 iOS 设备的实时数据推送 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以在操作中从 view.yml 获取值

    我想知道是否可以在操作中从 view yml 获取样式表的名称 最好使用像以下这样简单的东西 sfConfig get 我想访问 view yml 中的现有声明 而不是对其进行硬编码或将其复制到 app yml 之类的地方 Thanks 如
  • iOS8 中的扩展 - 由于没有系统应用程序而终止

    尝试运行我的 iOS 小部件 它是 Today 扩展 每次我尝试将其添加到通知中心时 我不断收到消息 由于没有系统应用程序而终止 有想法该怎么解决这个吗 我正在尝试制作一个包含表格视图的扩展 在您的项目设置中查找显示 启动屏幕文件 的设置
  • “mvn cleangenerate-sources”无法解决依赖关系

    there 我遇到了一个奇怪的问题 我有一个用 Maven 构建的多模块企业项目 我像这样设置项目层次结构 parentPom MyEar packaging ear MyUtilJar packaging jar MyEJB packin
  • 新安装时,curl 和 wget 对于 helloworld.php 返回错误 500,但浏览器正常

    我没有 htaccess 文件 我有index php 它包含以下内容 并且在 Chrome 或 Safari 等浏览器中运行良好 当我将其加载到浏览器中时 我得到 你好世界 当我尝试以下任何操作时 我收到错误 500 内部服务器错误 us
  • window.onresize 不在 Chrome 中触发,但在 Chrome Incognito 中触发

    我想问一下 在什么情况下可以这样呢 我有一个网站window onresize事件 适用于 Firefox IE9 Chrome 隐身窗口 但不适用于 Chrome 问题是 在我对代码进行一些不相关的更改之前 或者在我昨天更新 chrome
  • 在 Swift 中从类创建 JSON 对象

    我对 iOS 开发和 Swift 还很陌生 所以请耐心等待 我有一个类对象定义如下 class LocationPoint var x Double var y Double var orientation Double init x Do
  • 如何在 App store connect 中批准新版本

    如何在 App store connect 中批准新版本 我的意思是 我已经在苹果商店上提供了该移动应用程序的第一个版本 但现在我想发布一个新版本 我已经做的是通过 Xcode gt archive 上传它 然后在 appstoreconn
  • 如何在erlang中连接列表而不创建嵌套列表?

    我正在努力成为一名优秀的管理者并避免使用 我需要将一个元组添加到列表的末尾 而不创建嵌套列表 并且希望不必向后构建它并反转它 给定元组 T 和列表 L0 和 L1 当我使用 T L0 I get 元组 列表0 但是当我使用 L0 T 我得到
  • 如何从 Angular 应用程序范围之外更改 Angular 中的路由?

    我的问题标题可能有点令人困惑 所以希望以下详细信息能够澄清它 本质上 导航栏是我无法控制的 它是用简单的 HTML JS 编写的 我的应用程序是用 Angular 编写的 并在其中设置了路由 我可以做些什么来从导航栏触发 Angular 应
  • 复合类型的案例类伴生对象生成错误

    定义的空特征测试 trait Test 复合类型中使用什么 scala gt val a Int with Test 10 asInstanceOf Int with Test a Int with Test 10 以及带有复合类型参数的案