首页 > 其他 > 详细

Scala Case Class

时间:2015-04-13 14:47:40      阅读:88      评论:0      收藏:0      [点我收藏+]

Scala Case Class


原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yjplxq.blog.51cto.com/4081353/1415533

case classes 又是做什么的呢? 你可以就把他理解成一个普通的class,但是又略有不同,总结如下:

  1. 不需要写 new, 但是可以写

  2. 默认是public ,在任何地方调用

  3. 默认实现了toString

  4. 不能被继承

 

官方原文:

It makes only sense to define case classes if pattern matching is used to decompose data structures.

 

当然,只有在pattern matching下有意义这话未免有所偏激,至少部分老程序员会有其他意见:

get auto-generated equals, hashCode, toString, static apply() for shorter initialization, etc.

如下官网示例,

/**
 * @author: Lenovo(2015-04-13 13:37)
 */

// 抽象父类
abstract class Term

// case class
case class Var(name: String) extends Term

// case class
case class Fun(arg: String, body: Term) extends Term

// case class
case class App0(f: Term, v: Term) extends Term

object TermTest extends App {
  def printTerm(term: Term) {
    term match {
      case Var(n) =>
        print(n)
      case Fun(x, b) =>
        print("^" + x + ".")
        printTerm(b)
      case App0(f, v) =>
        print("(")
        printTerm(f)
        print(" ")
        printTerm(v)
        print(")")
    }
  }

  def isIdentityFun(term: Term): Boolean = term match {
    case Fun(x, Var(y)) if x == y => true
    case _ => false
  }

  val id = Fun("x", Var("x"))
  val t = Fun("x", Fun("y", App0(Var("x"), Var("y"))))
  printTerm(t)
  println
  println(isIdentityFun(id))
  println(isIdentityFun(t))
}

运行,

^x.^y.(x y)
true
false


Scala Case Class

原文:http://my.oschina.net/xinxingegeya/blog/399977

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!