问题标签 [case-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1563 浏览

scala - Scala 在案例类中使用弱引用

我想在 scala 中编写一个案例类,其中包含对其他对象的 scala.ref.WeakReference。我想知道在 scala 中完成的最佳实践是什么。

我对此有一些想法,第一个是这样的:

但这根本行不通,因为 scala 会在 CC1 中自动为 ref 生成一个具有强引用的 val。

我的第二个想法是:

那工作得很好。但是,它在代码重用方面不是很友好——如果weakRefget来自这样的基类/特征怎么办:

你会怎么写代码?请问你有什么建议?提前致谢!

0 投票
4 回答
5533 浏览

parsing - 轻松将 Key=Value 对的字符串解析为 Scala 案例类

有什么方法可以轻松地将一串键值对解析为 scala 案例类?

例如来自以下字符串:

进入

0 投票
1 回答
161 浏览

unit-testing - Scala 中的反射代码不会深入到 Vector

我的应用程序的这一部分从 JSON 解析到我的对象。我创建了一个单元测试,它创建了一个“PurchaseOrder”,将其转换为 JSON 并将其转换回相同类型的对象,并使用反射来检查原始的 PurchaseOrder 和最终的 PurchaseOrder 是否相同:

这是 JSON:

我将对象定义为特征:

并且实现如下:

现在:) 我的问题是我必须向 LineItem 添加很多字段,编译器抱怨我在一个案例类中不能有超过 22 个参数。所以我所做的就是将 LineItemImpl 重写为如下所示:

但现在我的反射单元测试出现错误:

这意味着被比较的两个对象中的两个向量在内部元素上有所不同。我理解这是因为当我将案例类更改为标准类时,它会丢失一些模式匹配属性,所以现在它比较的是对象地址而不是内容。

有没有办法解决这个问题,向 LineItemImpl 添加更多属性或注释?或者我唯一能做的就是修改我的反射检查以深入了解向量?理想情况下,我不想修改单元测试。

谢谢!

0 投票
4 回答
442 浏览

class - 如何实现案例类的实例共享

假设定义:

并且处于可能创建大量IntegerWrapper实例的情况下,i=[0..N>人们必须做什么:

  1. 将此范围映射到一组固定的单例[IntegerWrapper(0) .. IntegerWrapper(N)>

  2. 保留类的现有值语义IntegerWrapper(匹配、等于、哈希码、序列化)

我正在寻找类似于什么的实例共享java.lang.Integer。我想我的问题是是否可以在不必自己做所有事情的情况下做到这一点。简单地用 an 定义一个伴生对象是apply(i : Int)不会编译的。有什么建议么?

0 投票
3 回答
6801 浏览

scala - Scala - 枚举与案例类

我创建了名为 LogActor 的 akka 演员。LogActor 的接收方法处理来自其他参与者的消息并将它们记录到指定的日志级别。

我可以通过两种方式区分不同的级别。第一个:

第二个:(编辑

哪种方式更有效?匹配案例类或匹配枚举值是否需要更少的时间?

(我读了这个问题,但没有任何关于运行时问题的答案)

0 投票
3 回答
1121 浏览

scala - 通用重写 Scala 案例类

是否可以一般替换案例类中的参数?更具体地说,假设我想要一个接收“查找”案例类和“替换”案例类(如语法规则的左侧和右侧)以及目标案例类的替代函数,该函数将返回一个用替换案例类替换了查找案例类的参数的新案例类?该函数也可以简单地采用一个案例类(产品?)和一个应用于案例类的所有参数/产品的函数。

显然,给定一个特定的案例类,我可以使用 unapply 和 apply - 但是一般(给定任何案例类)编写这种函数的最佳/最简单/等方法是什么?

我想知道是否有使用 Scala 2.10 反射功能或来自 shapeless 的 Iso.hlist 的好的解决方案。

例如,我真正想做的是,给定如下类......

... 有一个函数可以接受任意案例类并返回它的副本,并将 From 类型的任何元素替换为 To 类型的实例。

0 投票
1 回答
1542 浏览

scala - 如何为具有默认参数的案例类编写 scala 提取器?

我有以下带有默认参数的案例类,我想知道如何编写一个 unapply 方法,以便我可以提取前两个参数。

我希望下面的代码很清楚。

0 投票
3 回答
2620 浏览

class - Scala:从子类引用伴随对象

我正在考虑以下 Scala 类布局。我有一个代表 Item 的基本特征 - 一个应该是不可变对象的接口,我们可以通过调用以下方法查询名称、重量并执行一些特定于对象的事情equip

我可以创建Item实现,手动创建案例类,但我想要某种基于“字典”的项目 - 即静态映射保存从类型 ID 到值的映射,name并且weight方法只是使用存储类型查询字典ID:

到现在为止还挺好。我可以Weapon(1)用来引用“短剑”的项目对象。但是,相同的基本原理适用于任何其他项类型,例如Armor,它使用完全相同的nameweight实现,但完全不同equip的其他抽象方法实现,例如:

看起来很像Weapon,不是吗?我想将通用模式(即在伴随对象字典和通用typ值中查找的实现)分解为:

但是我如何Weapon.NameDict从父类中引用子类的伴随对象(如 )——即我应该使用什么来代替???.NameDict(typ)以及如何向编译器解释子类的伴随对象必须包含这些字典?对于这样的问题,是否有更好、更 Scala 风格的方法?

0 投票
1 回答
1007 浏览

scala - 如何在Scala中获取与类参数同名的字段?

采取一个简单的类,如下所示:

现在,当我实例化这个类时,我通常希望它的用户能够使用nameage. 喜欢:

这当然行不通,除非我定义一个getter calledname或创建Person一个case class。后者是一个简单的解决方案,但我觉得我在滥用案例类?

前者还是有点不方便,因为我不能简单地:

因此,我必须将name类构造函数中的第一个重命名为其他名称,例如personNameor_namen。但这在我看来有点令人困惑,而且远没有那么优雅。它是相同的概念/变量/值,所以它应该具有完全相同的名称,对吧?

那么......这里最好或正确的做法是什么?只是添加它是如此case诱人。

0 投票
1 回答
889 浏览

mongodb - 将 Java bean 和 Scala 案例类映射到 MongoDB 对象

我目前正在努力解决这个问题..

在我们的系统中,我们使用Java bean Scala 案例类,它们经常相互包含。所以,我正在寻找如何将这些对象映射到mongoObjects的好解决方案,这样我就可以从数据库中保存/加载它们。

为此,我尝试了 Morphia,但不幸的是它不会从 json 序列化回对象,因为它无法构造案例类。

所以我尝试了Salat,但这个只适用于案例类而不适用于 java bean :(

有谁知道如何做到这一点?