zoukankan      html  css  js  c++  java
  • scala之旅-核心语言特性【case class】(十三)

    Case 类和一般的类类似,但是有些细小的区别,后面会讲。case 类对不可变数据建模非常友好。在后面的介绍中,我们将会在模式匹配中展示其优越性

    定义一个Case类

    一个最小的case类需要关键字 case class,一个标志符和一个参数列表(参数列表可以为空)

    case class Book(isbn: String)
    
    val frankenstein = Book("978-0486282114")

    注意,实例化case类Book时是不需要new关键字的。这是因为case类默认会有一个apply方法,这个方法会负责对象构造。

    当你创建一个有参数的case类时,这些参数都是public val 修饰的。

    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 值(val 值是不可变的). var 在case类的也是可以用的,但是不推荐使用。

    对象比较

    case类的实例是通过结构比较而不是通过引用:

    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类实例进行复制一个(浅)副本出来。你也可以有选择地修改构造器的实参

    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"

    message5的sender是用的message4的recipient值,但是message4的body是直接复制过去的。

  • 相关阅读:
    July 22nd 2017 Week 29th Saturday
    July 21st 2017 Week 29th Friday
    社交类APP原型模板分享——QQ
    专访UI中国认证设计师卤大湿 | 一位UI大师关于UI设计的思考
    第十届Mockplus ▪ UXPA用户体验西南赛区决赛成功举行
    【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
    旅游类APP原型模板分享——爱彼迎
    有了这款自动标注/切图神器,攻城狮终于可以省心了
    设计师升职加薪必须知道的10个设计网站
    官网类原型模板分享——Apple
  • 原文地址:https://www.cnblogs.com/zhouwenyang/p/13889773.html
Copyright © 2011-2022 走看看