Step into Scala - 04 - 操作符

本文深入探讨Scala中的操作符,包括语法、相等性、自增长、标识符、中置操作符、一元操作符、apply和update的使用,以及unapply在模式匹配中的作用。特别指出,Scala中的操作符实际上是方法,相等性不同于Java,自增长通过方法实现,而unapply用于提取器以支持模式匹配。
摘要由CSDN通过智能技术生成

目录

摘要

操作符与方法,缩写形式,相等性,自增长,标示符,apply,update,unapply

操作符

语法

Scala 中的操作符与 Java 类似

但是区别在由于 Scala 中一切皆是对象,所以这些操作符实际上是方法

var answer = 1 + 2
answer = 1.+(2) //+为方法名

当方法只有一个参数或无参时,Scala 可以对方法进行缩写,省略括号和点

a.method(b)
b.method()

缩写为

a method b
b.method
b method

相等性

在 Scala 中 == 等效于 equals,这一点和 Java 不同。

自增长

Scala 没有 ++-- 操作符,需要使用 +=1-=1 来实现同样的效果。

counter += 1

标识符 Identifier

  • 函数,变量,类等名称统称为标识符。
  • Scala 中可以使用各种 Unicode 符号作为标识符,如 (!, #) 等

对于保留字,还可以使用反引号包含几乎任何字符

val `val` = 32

中置操作符 Infix Operator

中置操作符是二元操作符,操作符放在参数当中
中置操作符实际是方法的调用

基本格式为

a 操作符 b

1 to 10
1.to(10)

1 -> 10
1.->(10)

1 + 10
1.+(10)

一元操作符

基本格式为

后置操作符

a 操作符

前置操作符

操作符 a

-1
1.unary_

apply 和 update

apply

f(arg1,arg2...)

f 不是函数或方法时,会自动调用 f.apply(arg1,arg2...)

update

f(arg1,arg2...) = value

f 不是函数或方法时,会自动调用 f.update(arg1,arg2...value)

apply 常用在伴生对象中用于隐式构造对象

class ApplyExample(var x: Int, var y: Int) {
  override def toString: String = x + "+" + y
}
object ApplyExample {
  def apply(x: Int, y: Int) = new ApplyExample(x, y)
}

// 隐式调用 apply 方法
val obj = ApplyExample(1, 2)

// 隐式调用 update 方法
ApplyExample(2, 3) = 4  //(2,3,4)

apply 和 update 也常被用在数组或映射中

val scores = new mutable.HashMap[String, Int]()
scores("Bob") = 100 //actually invoke scores.update("Bob,100)
val bob = scores("Bob") //actually invoke scores.apply("Bob")

unapply 提取器

  • unapply 提取器主要用在模式匹配中,从一个对象中提取值
  • unapply 的返回值是 Option,也可以使用其子类 Some
  • Scala 的正则表达式自带抽取器,可以抽取出一个 List。List 里的元素是匹配 “()” 里的表达式。
class ApplyExample(var x: Int, var y: Int) {
}
object ApplyExample {
    def apply(x: Int, y: Int) = new OperatorExample(x, y)
    def unapply(input: OperatorExample) = {
    if (input.x < 0)
      None
    else
      Some(input.x * 10, input.y * 10)
    }
}

val obj = ApplyExample(1, 2)
val result = obj match {
  case OperatorExample(1, 2) => "one"
  case OperatorExample(a, b) => a + "," + b
  case _ => "other"
}
println(result) //10,20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值