Scala学习笔记

标识符

在定义标识符的时候,可以像java经典模式那样定义。当然,scala在选择标识符的时候有比java更多的选择,可以使用Unicode字符和以字母和下划线开头,你也可以使用任意序列的操作符字符。此外,我们还可以定义符号标识符,例如:

val √ = scala.math.sqrt _

还有一个对于保留字符的定义的解决办法,我们可以利用反引号来实现对于关键字的定义方法。

val `val` = 42

这种方法可以标新立异,但是用起来易混淆,这样程序不宜读。

中置操作符

a 标识符 b
其中标识符代表一个带有两个参数的方法(一个隐式的参数和一个显示的参数)。
例如:
1 to 10 等价于 1.to(10)

一元操作符

只有一个参数,比如:1 toString() 等价于 1.toString()

如下四个操作符+、-、!、~可以作为前置(prefix)操作符,出现在参数之前。它们被转换成对名为unary_操作符的方法调用。例如:
-a 等价于 a.unary_-一样。

赋值操作符

a 操作符= b
等同于:
a = a 操作符 b

需要注意:

  • <=、>=和!= 不是赋值操作符
  • 以=开头的操作符不是赋值操作符
  • 如果a有一个名为操作符=的方法,那么该方法会被直接调用。

结合性

在scala中,所有操作符都是左结合的,除了:
- 以冒号(:)结尾的操作符
- 赋值操作符。

在scala中有一个很有用的操作符::,它是右结合的,用来构造列表。例如:

1::2::Nil 

等价于

1::(2::Nil

比如:
这里写图片描述

apply和update

apply方法经常用在伴生类对象中,用来构造对象而不是使用new显示地使用new,比如:

class RichFile(val path : String) {
}
object RichFile{
  def apply(path : String) : RichFile = {
    new RichFile(path)
  }
}

在object中定义了apply方法,返回一个对象。

提取器

所谓提取器就是一个带有unapply方法的对象。它的返回值是一个Option,它包含一个元组,每个匹配到的变量各有一个值与之对应。
还可以用它来进行模式匹配。
比如:

object RichFile{
  def apply(path : String) : RichFile = {
    new RichFile(path)
  }

  def unapply(richFile: RichFile) = {
    if(richFile.path == null){
      None
    }else{
      val reg = "([/\\w+]+)/(\\w+)\\.(\\w+)".r//转换为正则表达式
      val reg(r1,r2,r3) = richFile.path//这块相当于模式匹配
      Some(r1,r2,r3)
    }
  }
  def main (args: Array[String] ) {
    val richFile = RichFile("/home/cay/readme.txt")
    val RichFile(r1,r2,r3) = richFile
    println(r1)
    println(r2)
    println(r3)
  }
}

unapplySeq方法

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

比如:

object RichFile2 {
  def apply(path: String): RichFile2 = new RichFile2(path)

  def unapplySeq(richFile2: RichFile2): Option[Seq[String]] =
    if(richFile2.path == null) None
    else{
      Some(richFile2.path.split("/"))
    }

  def main(args: Array[String]) {
    val richFile = RichFile2("/home/cay/readme.txt")
    val RichFile2(r @ _*) = richFile
    println(r)
  }
}

RichFile2提取出来组成路径的所有部分序列。
这里写图片描述

apply方法和unapply方法在scala中是比较重要的两个方法,提现了scala的一大特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值