scala学习笔记2

一、算术和操作符重载

a + b

是如下方法的简写:

a.+(b)

在scala中你可以使用任何符号来为方法命名。比如BigInt类就定义了一个/%的方法,该方法返回一个对偶,对偶的内容是除法操作得到的商和余数。

通常来说,你可以用

a 方法 b

作为以下代码的简写

a.方法(b)

这里的方法是一个带有两个参数的方法(一个隐式的和一个显示的)。例如1.to(10)可以简写成1 to 10

scala语言并没有提供++和--操作符,我们需要使用+=1和-=1

scala认为Int类是不可变的。

对于BigInt和BigDecimal对象,你可以以常规的方式使用那些数学操作符:

scala> val x:BigInt = 1234567890
x: BigInt = 1234567890 scala> x*x*x
res0: scala.math.BigInt = 1881676371789154860897069000

在java中这样的操作要写成x.multiply(x).multiply(x)

二、函数和方法

相比java,在scala中使用函数更为方便,你不需要从某个类调用它的静态方法

scala> import scala.math._  //在scala中,_是通配符,类似java的*
import scala.math._ scala> sqrt(2)
res3: Double = 1.4142135623730951 scala> pow(2,4)
res4: Double = 16.0

使用scala.开头的包时,我们可以省去scala前缀。例如import math._等同于import scala.math._  而math.aqrt(2)等同于scala.math.sqrt(2)

通常一个类对应有一个伴生对象(companion object),其方法就跟java中的静态方法一样。

举例来说,BigInt类的BigInt伴生对象有一个生成指定位数随机素数的方法probablePrime:

scala> BigInt.probablePrime(100,scala.util.Random)
res6: scala.math.BigInt = 988540475240285093287416884009

这里的Random是一个单例的随机数生成器对象,而该对象是在scala.util表中定义的。这是用单例对象比用类更好的为数不多的场景之一。在java中,为每个随机数都构造出一个新的java.util.Random对象是一个常见的错误。

不带参数的scala方法通常不使用括号。一般来讲,没有参数且不改变当前对象的方法不带圆括号。

三、apply方法

scala> "hello"(4)
res7: Char = o

背后实现的原理是一个名为apply的方法。

也就是说

"hello"(4)是如下语句的简写:

"hello".apply(4)

BigInt伴生对象有将字符串或者数字转换为BigInt对象的apply方法

scala> BigInt("11113465684")
res8: scala.math.BigInt = 11113465684

像这样使用伴生对象的apply方法是scala中构建对象的常用手法。

例如

Array(1,4,9)返回是一个数组,用的就是Array伴生对象的apply方法。

上一篇:查询表的DDL


下一篇:vim与sublime,程序员的屠龙刀和倚天剑