Scala 案例类和构造函数

2023-12-19

我发现自己编写了很多(某种)样板代码。例如说我有以下特征

trait Foo {
  def x: Int
}

trait Bar {
  def y: Boolean
  def z: String
}

然后我想要一个案例类,它的作用只不过是实现这些。

case class MyClass(x: Int, y: Boolean, z: String) extends Foo with Bar

这看起来并不烦人,但现在想象一下我的特质有十几个defs 每个并且名称x, y, and z更长。写出案例类意味着我必须将所有这些重写为MyClass.

有没有办法生成x: Int, y: Boolean, z: String构造函数部分自动基于我扩展的特征?


我认为你正在寻找的是注释宏 http://docs.scala-lang.org/overviews/macros/annotations.html可以为您处理这项工作。然后,您可以通过编写如下内容来调用该宏:

@FieldsFromTraits
case class MyClass extends Foo with Bar

然后,注释宏可以使用特征中的信息重写您的案例类。

做类似事情的图书馆是MetaRest https://github.com/pathikrit/metarest。您可以尝试调整该实现。我看看今晚能不能把一些东西放在一起。

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

Scala 案例类和构造函数 的相关文章

随机推荐

  • 如何在 Objective-C 中使用运算符 < 或 > 比较对象?

    如何比较 Objective C 中自定义类的两个对象 我尝试超载 NSComparisonResult compare id other 方法 如果我手动调用该方法 这非常有用 if obj1 compare obj2 NSOrdered
  • 根据对角线对 numpy 矩阵进行排序

    我有一个矩阵 对角线上应该有一些 但列混淆了 但我不知道如何在没有明显的 for 循环的情况下有效地交换行以获得对角线上的统一 我什至不确定我会传递什么键来排序 有什么建议么 您可以使用 numpy 的argmax http docs sc
  • 将 std::string 转换为 QString

    我有一个std string content我知道包含 UTF 8 数据 我想将其转换为QString http doc qt io qt 4 8 qstring html 我该如何做到这一点 避免 Qt 中的 from ASCII 转换
  • python中将字符串转换为树结构

    我在 python 中有一个如下形式的字符串 line a line b line ba line bb line bba line bc line c line ca line caa line d 你可以明白这个想法 它实际上采用与 p
  • Delphi / SuperObject - 访问子节点

    我的服务器有以下 JSON userid 12 username TestChar logged yes status Premium User areas SERVICEAREA XX1 id 1 area SERVICEAREA XX1
  • 在 Perl 中,如何打印哈希中最大值对应的键?

    如何仅打印哈希的第一个键和元素 我已经有一个排序的哈希 但我只想打印第一个键和相应的值 谢谢 感谢大家 最后我将键和值推送到两个不同的 array 并打印每个数组的元素 0 它可以工作 哈希值具有无序的键 所以 不存在这样的密钥第一把钥匙在
  • 如何从 Emacs 运行 iex?

    当我使用 Emacs 中的 elixir mode iex 运行 iex 时 我不断收到此警告 Warning could not run smart terminal falling back to dumb one 我认为这只是意味着我
  • zmq:多线程可以以简单的 PUSH-PULL 模式进行 PUSH

    我有两个进程 producer它通过推送消息ZMQ http www zeromq org to a consumer以简单的 拉 推 点对点模式 生产者有几个内部线程send 通过 zmq 但是 0MQ 的文档建议不要在线程之间共享套接字
  • 如何从 JAX-WS Web 服务中访问 ServletContext?

    我想通过将对象存储为 Servlet 上下文属性来在 Servlet 和 Web 服务 JAX WS 之间共享该对象 但是如何从 Web 服务中检索 servlet 上下文呢 JAX WS 通过消息上下文提供 Servlet 上下文 可以使
  • 对 log10 函数的未定义引用

    我正在使用 Eclipse Kepler 进行构建 并包括math h 但是 我收到错误 对 log10 的未定义引用 还类型uint8 t and unit32 t都没有得到解决 我已将两者都包括在内stdint h and inttyp
  • PyYAML 错误:无法确定标签“!vault”的构造函数

    我正在尝试读取具有标签的 YAML 文件 vault在里面 我收到错误 无法确定标签 vault 的构造函数 在阅读了几篇博客后 我了解到我需要指定一些构造函数来解决此问题 但我不清楚如何做到这一点 import yaml from yam
  • C# - 将控件移动到鼠标位置

    我试图让一个控件在用户单击并拖动控件时跟随光标 问题是 1 控件没有到达鼠标的位置 2 控件闪烁并飞得到处都是 我尝试了几种不同的方法来做到这一点 但到目前为止都失败了 我试过了 protected override void OnMous
  • 通过 DI 在 Spring 框架中正确使用 LOG4J

    我正在尝试使用 Log4j 作为 Spring 框架的一部分 据我了解 通过使用适当的豆子 系统应该映射一个可在代码中访问的单例实例 同时将日志记录深度自动映射到类 类似于 Log4J 的正常使用 如下所示 Logger log Logge
  • 如何修复 IndentationError:“需要缩进块”?

    我收到一个错误 IndentationError 需要一个缩进块 在第3行 answer subprocess check output home dir final 3 sh 我的代码是 import subprocess while T
  • 是否可以使用 TestCafe .meta 对象跳过从 cli 运行的测试

    我正在使用 TestCafe 来运行我的集成测试 我知道它有test skip函数 当我在本地测试并想要跳过一组我不需要 不想运行的测试时 这非常有用 但我想知道是否有办法运行所有测试 除了 test meta environmentSpe
  • Select2 不创建 name 属性

    我使用 select2 jQuery 插件创建了一个标签框 因此我使用了以下html表单代码
  • 当 UITextField 成为第一响应者时,如何使 UIScrollView 自动滚动

    我看过周围的帖子here https stackoverflow com questions 4585718 disable uiscrollview scrolling when uitextfield becomes first res
  • 使用 C++ 调整位图图像亮度/对比度

    使用 C 调整图像亮度 对比度 无需使用任何其他 3rd 方库或依赖项 图像亮度为here https web archive org web 20091229041814 http www kweii com site color the
  • 如何弹出“?123”Android键盘

    我有一个 EditText 需要根据状态处理数字和 或字母输入 在某些情况下 用户可以输入任一类型的输入 我只能使用以下命令弹出 电话 键盘setInputType InputType TYPE CLASS NUMBER 它可以工作 但不允
  • Scala 案例类和构造函数

    我发现自己编写了很多 某种 样板代码 例如说我有以下特征 trait Foo def x Int trait Bar def y Boolean def z String 然后我想要一个案例类 它的作用只不过是实现这些 case class