scala 学习笔记--对象
2016-08-15 16:07
417 查看
一、对象
1.伴生对象:与类同名的对象,类和它的伴生对象可以相互访问私有特性,但是它们必须存在于同一个源文件中。
2.对象的apply方法:经常被用在伴生对象中,可以不用构造器,省去new关键字,方便很多。注意Array(100)与new Array(100)的区别:
3.对象的update方法:
4.提取器:所谓提取器就是一个带有unapply方法的对象,可以把unapply方法看成伴生对象中apply方法的方向操作。apply方法接收参数然后把他们变成对象,unapply方法接收对象然后把值赋给参数。
上面定义了一个Fraction类,apply方法根据分子和分母创建一个分数,unapply则根据一个分数提取出分子和分母。
或者用于模式匹配:
要提取任意长度的值得序列,我们应该用unapplySeq来命名我们的方法,它返回一个Option[Seq[A]],其中A是被提取值得类型。
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是被提取值得类型。
相关文章推荐
- Windows下Scala环境搭建
- Windows7下安装Scala 2.9.2教程
- Scala代码实现列出Hadoop 文件夹下面的所有文件
- ClassNotFoundException:scala.PreDef$
- sbt创建web项目
- XML 文件解析--含Unicode字符的XML文件
- Scala 学习随笔
- Scala 小程序记录(学习期间的代码片段)
- Spark机器学习(二) 局部向量 Local-- Data Types - MLlib
- Spark机器学习(三) Labeled point-- Data Types
- 分分钟掌握快速排序(Java / Scala 实现)
- Scala极速入门
- Spark初探
- Scala实现REST操作
- Scala method call syntax
- 关于Scala多重继承的菱形问题
- Scala 高阶函数(high-order function)剖析
- Scala Monad Design Pattern
- Scala类型系统——高级类类型(higher-kinded types)
- Spray.io搭建Rest服务