内容要点
安装Scala,这个没有什么好说的,去官网下,然后点下一步,也不用配路径,反正我用的exe安装,路径已经配好了。
Scala中有特别区分值(val)和变量(var),而且声明时必须初始化。
val x, y = 100 // x=100, y=100 var a, b : String = null
常用类型:Byte,Char,Short,Int,Long,Float,Double,Boolean。不区分基本类型和引用类型。就是说可以这样用↓↓↓ 厉害了。
1.to(10) // 生成Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
实际上Scala是把包装类型去掉了,转换由Scala编译器做。还有一些数据类型和String对应的扩展类(RichChar,RichInt,RichDouble,StringOps …),丧心病狂地添加了好多超有用的方法。
操作符归到方法一起,就是说你可以定义操作符。Scala不提供
++
和--
,只能用+=1
或者-=1
。导入包,以scala.开头的包可以省去前缀,即下面两种写法等同。
import scala.math._ // _等同于Java中的* import math._
Scala没有静态方法(…),但提供了单例对象和伴生对象(…什么鬼)。
apply方法是()操作符的重载,比如下面两种方法等同。
"Hello"(4) // 返回o "Hello".apply(4)
Scala也有自己的文档,Scaladoc,没事就瞅瞅吧。
练习
在Scala REPL中键入
3.
,然后按Tab键。有哪些方法可以被应用?
在Scala REPL中,计算3的平方根,然后再对该值求平方。现在,这个结果与3相差多少?(提示:res变量是你的朋友。)
res变量是val还是var?
,,ԾㅂԾ,, 反正我用的val,既然不打算改变它的值就用val。Scala允许你用数字去乘字符串,去REPL中试一下
"carry" * 3
。这个操作做什么?在Scaladoc中如何找到这个操作?
首先,Java的String类肯定是不能这么用*操作符的,那么就是Scala中对应的扩展类StringOps里面定义的了。我们去Scaladoc中搜索一下,就找到啦↓↓↓
10 max 2的含义是什么?max方法定义在哪个类中?
哪个类?还是去Scaladoc搜一下吧。
用BigInt计算2的1024次方。
哦,忘了说BigInt(2)
可以产生一个BigInt对象,用的是BigInt伴生对象的apply方法,就不用写new啦。为了在使用
probablePrime(100, Random)
获取随机素数时不在probablePrime和Random之前使用任何限定符,你需要引入什么?
照例,搜一波
创建随机文件的方式之一时生成一个随机的BigInt,然后将它转换乘三十六进制,输出类似“dsfalkfjlksdajf”这样的字符串。查阅Scaladoc,找到在Scala中实现该逻辑的方法。
首先,要由BigInt转成一个字符串,那么我们可以看看BigInt的toString方法有没有重载的,忒么一下就找到了……真是没有成就感呀。
在Scala中如何获取字符串的首字符和尾字符。
take、drop、takeRight和dropRight这些字符串函数是做什么用的?和substring相比,它们的优点和缺点有哪些?
优点和缺点……不知道。take(n)可以看成substring(0, n),即固定了一个起始位置。那么这些方法适合从头或者尾开始来截取字符串,substring适合任意位置截取。感觉take或者drop方法会用的比较多。