scala 学习笔记--对象

一、对象
1.伴生对象:与类同名的对象,类和它的伴生对象可以相互访问私有特性,但是它们必须存在于同一个源文件中。
2.对象的apply方法:经常被用在伴生对象中,可以不用构造器,省去new关键字,方便很多。注意Array(100)与new Array(100)的区别:

Array(100)  //调用的是apply(100),输出一个只含有一个元素(100)的Array
new Array(100) //调用构造器this(100),生成一个含有100null元素的Array

3.对象的update方法:

val scores = new scala.collection.mutable.HashMap[String,Int]
scores("Bob") = 100 //调用scores.update("Bob",100)
val bobscores = scores("Bob") //调用scores.apply("Bob")

4.提取器:所谓提取器就是一个带有unapply方法的对象,可以把unapply方法看成伴生对象中apply方法的方向操作。apply方法接收参数然后把他们变成对象,unapply方法接收对象然后把值赋给参数。

class Fraction(n:Int,m:Int){
  ...
}
object Fraction(){ 
  def apply(n:Int,m:Int) = new Fraction(n,m)
  // 伴生对象的apply方法
  def unapply(input:Fraction)=
  if(input.den == 0) None else Some((input.num,input.den))
  // 伴生对象的unapply方法
}

上面定义了一个Fraction类,apply方法根据分子和分母创建一个分数,unapply则根据一个分数提取出分子和分母。

var Fraction(a,b) = Fraction(3,4)*Fraction(2,5)
// a和b分别被初始化成运算结果的分子和分母

或者用于模式匹配:

case Fraction(a,b) => ... 
// a和b分别被绑到分子和分母

要提取任意长度的值得序列,我们应该用unapplySeq来命名我们的方法,它返回一个Option[Seq[A]],其中A是被提取值得类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值