Questions tagged «case-class»

案例类是常规类,可导出其构造函数参数并通过模式匹配提供递归分解机制。

16
Scala的案例类和类之间有什么区别?
我在Google中进行搜索,找到了case class和之间的区别class。每个人都提到,当您要在类上进行模式匹配时,请使用用例类。否则,使用类,还提及一些额外的好处,例如equals和哈希码覆盖。但是,这些是为什么应该使用案例类而不是类的唯一原因吗? 我猜应该在Scala中使用此功能有一些非常重要的原因。有什么解释?是否有资源可以从中学习更多有关Scala案例类的信息?


1
IntelliJ Scala插件的案例类缩进是荒谬的
当case类具有许多字段并且它们的名称很长时,通常最好在每一行中编写每个字段,例如: case class Person ( name: String, age: Int ) 这类似于C / C ++的struct定义,即使case类变大也完全可读。但是IntelliJ IDEA的默认Scala插件会自动更改其缩进: case class Person ( name: String, age: Int ) 在我看来,这很奇怪,但是《Scala风格指南》并未提及有关案例类缩进的任何内容。 我在IDE设置中找不到任何可以更改此行为的内容。是否可以选择使自动缩进像我上面描述的那样工作,或者对案例类禁用自动缩进?

7
更新嵌套结构的更干净方法
说我有以下两个case classES: 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)) 现在,如果我要更新zipCode,raj则必须做: val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1)) 随着嵌套级别的增加,这变得更加难看。有没有更清洁的方法(例如Clojure的方法update-in)来更新此类嵌套结构?
124 scala  case-class  zipper 

6
为简单案例类定义订购的简单惯用方式
我有一个简单的scala案例类实例列表,我想使用list.sorted,以可预测的字典顺序打印它们,但是会收到“没有为...定义隐式排序”。 是否存在为案例类提供词典编排顺序的隐式? 是否有简单的惯用方式将词典顺序混合到案例类中? scala> case class A(tag:String, load:Int) scala> val l = List(A("words",50),A("article",2),A("lines",7)) scala> l.sorted.foreach(println) <console>:11: error: No implicit Ordering defined for A. l.sorted.foreach(println) ^ 我对“ hack”不满意: scala> l.map(_.toString).sorted.foreach(println) A(article,2) A(lines,7) A(words,50)

5
声明Scala案例类有什么缺点?
如果您正在编写使用许多漂亮的,不变的数据结构的代码,那么case类似乎是天赐之物,只需一个关键字即可免费为您提供以下所有功能: 默认情况下所有内容都是不可变的 自动定义吸气剂 体面的toString()实现 兼容的equals()和hashCode() 使用unapply()方法进行匹配的随播对象 但是将不可变数据结构定义为案例类的缺点是什么? 它对班级或其客户有什么限制? 在某些情况下,您应该偏爱非案例类吗?
105 scala  case-class 

4
Scala案例类继承
我有一个基于Squeryl的应用程序。我将模型定义为案例类,主要是因为我发现使用复制方法很方便。 我有两个严格相关的模型。字段是相同的,许多操作是相同的,它们将存储在同一数据库表中。但是,有些行为仅在两种情况之一中才有意义,或者在两种情况下都有意义但有所不同。 到现在为止,我只使用了单个case类,带有用于区分模型类型的标志,并且所有基于模型类型不同的方法都以if开头。这很烦人,而且类型安全性不高。 我想做的是考虑祖先案例类中的常见行为和字段,并从中继承两个实际模型。但是,据我所知,从案例类继承在Scala中是不可思议的,并且如果子类本身是案例类(不是我的案例),甚至是禁止的。 从案例类继承时应该注意哪些问题和陷阱?就我而言,这样做有意义吗?

10
如何覆盖案例类同伴中的应用
这就是这种情况。我想这样定义一个案例类: case class A(val s: String) 并且我想定义一个对象以确保在创建类的实例时,“ s”的值始终为大写,如下所示: object A { def apply(s: String) = new A(s.toUpperCase) } 但是,这不起作用,因为Scala抱怨apply(s:String)方法定义了两次。我知道case class语法会自动为我定义它,但是我是否还有其他方法可以实现此目的?我想坚持使用case类,因为我想将其用于模式匹配。

11
要在Scala中映射的案例类
有没有一种我可以转换Scalacase class实例的好方法,例如 case class MyClass(param1: String, param2: String) val x = MyClass("hello", "world") 变成某种映射,例如 getCCParams(x) returns "param1" -> "hello", "param2" -> "world" 它适用于任何案例类,而不仅仅是预定义的案例类。我发现您可以通过编写查询基础产品类的方法来提取案例类名称,例如 def getCCName(caseobj: Product) = caseobj.productPrefix getCCName(x) returns "MyClass" 因此,我在寻找类似的解决方案,但针对案例类字段。我以为解决方案可能必须使用Java反射,但是如果案例类的基础实现发生变化,我不希望编写可能会在将来的Scala版本中破坏的内容。 目前,我正在使用Scala服务器,并使用case类定义协议及其所有消息和异常,因为它们是一个如此漂亮,简洁的构造。但是,然后我需要将它们转换为Java映射,以便通过消息传递层发送给任何客户端实现使用。我当前的实现只为每个案例类分别定义了一个翻译,但是最好找到一个通用的解决方案。
75 scala  case-class 

2
案例类继承的“错”是什么问题?
在寻找其他东西时,我完全出于偶然,偶然发现了几句有关恶性案例类继承的评论。有一个叫做的东西ProductN,可怜的人,国王,精灵和巫师,以及案例类继承如何丢失了某种非常理想的属性。那么,案例类继承有什么问题呢?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.