Scala case class
case class很像普通的类,它们的差异我们在后面会解释。case class适用于建模不变的数据。
定义一个case class
一个最小的case class需要关键字case class,一个标识符和一个参数列表(这个可以为空):
case class Book(isbn: String) { } object Book { def main(args: Array[String]): Unit = { val frankenstein = Book("978-0486282114") println(frankenstein) } }
注意当初始化Book case class时没有用new关键字。这是因为case class默认有一个apply方法会关注对象的构造。
当你用参数创建一个case class时,参数时public的val s。
case class Message(sender: String, recipient: String, body: String) val message1 = Message("guillaume@quebec.ca", "jorge@catalonia.es", "Ça va ?") println(message1.sender) // prints guillaume@quebec.ca message1.sender = "travis@washington.us" // this line does not compile
你不能重新为message1.sender赋值,因为它是一个val(是不可变的),可以在case class中使用var s来声明变量,但是这是不被鼓励的。
比较
case class是根据结构来进行比较的,不是根据引用。
case class Message(sender: String, recipient: String, body: String) val message2 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?") val message3 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?") val messagesAreTheSame = message2 == message3 // true
尽管message2和message3指向不同的对象,但是每个对象的值是相等的。
复制
你可以简单的使用copy方法来创建一个case class实例的副本(浅拷贝)。你可以随意的改变构造器的参数。
case class Message(sender: String, recipient: String, body: String) val message4 = Message("julien@bretagne.fr", "travis@washington.us", "Me zo o komz gant ma amezeg") val message5 = message4.copy(sender = message4.recipient, recipient = "claire@bourgogne.fr") message5.sender // travis@washington.us message5.recipient // claire@bourgogne.fr message5.body // "Me zo o komz gant ma amezeg"
message4的recipient被用作message5的sender,message4的body被直接拷贝到message5。
相关推荐
允许运行时数据用作Scala案例类定义: 在运行时定义并加载案例类 通过类型别名的伪Type-Provider 运行时代码生成和评估可以在scala.tools.reflect.ToolBox完成,但是每个包只能创建一个类(请参见此)。 因此,...
该项目还演示了如何使用这些不同的 JSON 库来反序列化 Scala case class 。 当然,我们也提供了运行基准测试和生成测试数据的代码,可能有用.ja关于图书馆其中一些库(Rapture 和 Json4s)使用 ,Java JSON 解析库...
json 2案例类 通过将JSON转换为案例类来启动您的Scala API客户端。... case class Foo(a: Bar, b: Bar, c: Double) case class Bar(a: Option[String], b: String) { "a": { "a": "fubar", "b":
Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许...Scala的Case Class及其内置的模式匹配相当于函数式编程语言中常用的代数类型(Algebraic Type)。
case class Artist( name : String, genres : Set[Genre] ) case class Genre( name : String ) // Initialize SORM, automatically generating schema: import sorm._ object Db extends Instance( entities = ...
注:此处的普通类指的是scala中定义的非case class的类框架在底层将其视作java定义的标准bean类型来处理而scala中定义的普通bean类,不具备字段的java标准getters和setters,因而会处理失败,可以通过【@Bean...
scala> case class User(id: Int, name: String, groups: List[String]) defined class User scala> val joe = User(1000, "joe", List("admin", "staff")) joe: User = User(1000,joe,List(admin, staff)) scala> ...
case class Tape[T](left: List[T], cell: T, right: List[T])(implicit func: Func[T]) { private def headOf(list:List[T]) = if (list.isEmpty) func.zero else list.head private def tailOf(list:List[T]) = ...
24.2.2 ClassTag、TypeTag与Manifest 457 24.3 Scala 的高级运行时反射API 458 24.4 宏 461 24.4.1 宏的示例:强制不变性 463 24.4.2 关于宏的最后思考 466 24.5 本章回顾与下一章提要 466 附录A...
spark-db-case-class:将Spark DB名称映射到case类中的字段
PureCSV, Scala的类型安全和样板自由CSV库 PureCSV PureCSV是用于处理CSV格式的Scala 库。 库去掉了使用CSV所需的大部分样板文件scala> import purecsv.unsafe._scala> case class
asmifier-caseclass-experiments 在各种 case 类上运行 ASMifier 以检查转储输出的差异,并推导出将值成员任意添加到动态类定义的规则。 实现基于文件或“离线”数据定义 Scala 案例类的目标。 // 这些步骤是使用...
Why learn Scala? You don’t need to be a data scientist or distributed computing expert to appreciate this ... Objects, Case Classes and Traits Chapter 10. Advanced Typing Appendix A. Reserved Words
NoArgs构造函数 像使用Scala的Scala的NoArgsConstructor这样...case class Person ( firstName : String , lastName : String ) 和 val person = new Person () 并使用或将org.scalamacros:paradise添加到编译器插件
《快学Scala》英文第二版: Scala for the Impatient Second Edition Cay S. Horstmann 目录: 1 THE BASICS A1 1 1.1 The Scala Interpreter 1 1.2 Declaring Values and Variables 4 1.3 Commonly Used Types 5 ...
匹配样例类 scala可以使用模式匹配来匹配样例类,从而可以快速获取样例类中的成员数据。...case class Person(name:String, age:Int) case class Order(id:String) def main(args: Array[String]): Unit =
Scala采购 这是一个用于在 Scala 中编写领域驱动和事件源应用程序的库。... case class Cast () extends Command case class Cancel () extends Command case class Casted () extends Event case cla
case class Equals [ A > : B < : B , B ]() // this checks type equality type S = x - > : y - > : z - > : ( x @@ z @@ (y @@ z) ) type K = x - > : y - > : x type result = ( S @@ K @@ K @@ a ) # - > * ...
14.11 case语句中的中置表示法 231 14.12 匹配嵌套结构 232 14.13 样例类是邪恶的吗 233 14.14 密封类 234 14.15 模拟枚举 235 14.16 Option类型 235 14.17 偏函数 L2 236 练习 238 第15章 注解 A2243 15.1...
它使用反射,因此如果您使用它,您可能需要将libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaV到您的项目中。 对象的枚举 定义 sealed abstract class Color ( red : Double , green : Double...