您的位置:首页 > 其它

scala 学习笔记--对象

2016-08-15 16:07 417 查看
一、对象

1.伴生对象:与类同名的对象,类和它的伴生对象可以相互访问私有特性,但是它们必须存在于同一个源文件中。

2.对象的apply方法:经常被用在伴生对象中,可以不用构造器,省去new关键字,方便很多。注意Array(100)与new Array(100)的区别:

Array(100)  //调用的是apply(100),输出一个只含有一个元素(100)的Array
new Array(100) //调用构造器this(100),生成一个含有100个null元素的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是被提取值得类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala