Tag: 案例级

如何解决22个字段的Scala案例类限制?

Scala案例类在构造函数中有22个字段的限制。 我想超过这个限制,是否有办法做到与案例类一起工作的inheritance或组合?

Scala案例类的inheritance

我有一个基于Squeryl的应用程序。 我把我的模型定义为案例类,主要是因为我觉得复制方法很方便。 我有两个严格相关的模型。 这些字段是相同的,许多操作是相同的,它们将被存储在同一个数据库表中。 但是有一些行为只有在两种情况中才有意义,或者在两种情况下都是有道理的,但却是不同的。 到目前为止,我只使用了一个单一的案例类,用一个标志来区分模型的types,所有基于模型types的方法都以if开始。 这是烦人的,不太安全。 我想要做的就是将祖先事例类中的常见行为和领域分解,并从中inheritance两个实际的模型。 但是,据我所知,从案例类inheritance是在斯卡拉皱眉,甚至被禁止,如果子类本身是一个案例类(不是我的情况)。 从案例类inheritance我应该注意哪些问题和陷阱? 这样做对我来说是否合理?

如何覆盖在案例类同伴中的应用

所以情况就是这样。 我想定义一个case类如下所示: case class A(val s: String) 我想定义一个对象来确保当我创build类的实例时,“s”的值总是大写,如下所示: object A { def apply(s: String) = new A(s.toUpperCase) } 然而,这是行不通的,因为Scala抱怨apply(s:String)方法被定义了两次。 我明白,案例类语法会自动为我定义,但不是有另一种方式,我可以实现这一目标吗? 我想坚持案例类,因为我想用它来进行模式匹配。

更清晰的方式来更新嵌套结构

假设我有以下两个case class : case class Address(street: String, city: String, state: String, zipCode: Int) case class Person(firstName: String, lastName: String, address: Address) 和Person类的以下实例: val raj = Person("Raj", "Shekhar", Address("M Gandhi Marg", "Mumbai", "Maharashtra", 411342)) 现在,如果我想更新raj zipCode ,那么我将不得不这样做: val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1)) 随着更多的嵌套层次,这变得更加丑陋。 有没有一个更清洁的方式(像Clojure的update-in )来更新这样的嵌套结构?