《快学scala》习题解答-第一章-基础

《快学Scala》(英文版:《Scala for the Impatient》),代码已传github:

https://github.com/vernonzheng/scala-for-the-Impatient

书为第一版。scala为2.11.4,jdk1.7.45,操作系统Mac OS X Yosemite 10.10.1。

第一章 基础

1.1
在Scala REPL中键入3,然后按Tab键。有哪些方法可以被应用?

答:

1
2
3
% + > >>> isInstanceOf toDouble toLong unary_+ |
& - >= ^ toByte toFloat toShort unary_-
* / >> asInstanceOf toChar toInt toString unary_~

1.2
在Scala REPL中,计算3的平方根,然后再对该值求平方。现在,这个结果与3相差多少?(提示:res变量是你的朋友)

答:

1
2
3
4
5
6
7
8
scala> import scala.math._
import scala.math._
scala> sqrt(3)
res7: Double = 1.7320508075688772
scala> 3 - res7
res8: Double = 1.2679491924311228

1.3
res变量是val还是var?

答:
res变量是val

1.4
Scala允许你用数字去乘字符串—去REPL中试一下”crazy”*3。这个操作做什么?在Scaladoc中如何找到这个操作?

答:

1
2
scala> "crazy"*3
res9: String = crazycrazycrazy

scala docs 去查StringOps:http://www.scala-lang.org/api/current/#scala.collection.immutable.StringOps

1.5
10 max 2的含义是什么?max方法定义在哪个类中?

答:

1
2
scala> 10 max 2
res10: Int = 10

返回两者中比较大的一个
max方法定义在RichInt方法中。http://www.scala-lang.org/api/current/#scala.runtime.RichInt

1.6
用BigInt计算2的1024次方

答:

1
2
scala> BigInt(2).pow(1024)
res13: scala.math.BigInt = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

1.7
为了在使用probablePrime(100,Random)获取随机素数时不在probablePrime和Radom之前使用任何限定符,你需要引入什么?

答:
import需要的包。Random在scala.util中,而probablePrime是BigInt中的方法。

1
2
3
4
5
import scala.math.BigInt._
import scala.util.Random
probablePrime(100,Random)
res15: scala.math.BigInt = 1137139793510393954801305013479

1.8
创建随机文件的方式之一是生成一个随机的BigInt,然后将它转换成三十六进制,输出类似”qsnvbevtomcj38o06kul”这样的字符串。查阅Scaladoc,找到在Scala中实现该逻辑的办法。

答:

1
2
scala> scala.math.BigInt(scala.util.Random.nextInt).toString(36)
res19: String = -wda3r0

1.9
在Scala中如何获取字符串的首字符和尾字符?

答:

1
2
3
4
5
6
7
8
9
10
11
scala> "Hello"(0)
res20: Char = H
scala> "Hello".take(1)
res21: String = H
scala> "Hello".reverse(0)
res22: Char = o
scala> "Hello".takeRight(1)
res23: String = o

1.10
take,drop,takeRight和dropRight这些字符串函数是做什么用的?和substring相比,他们的优点和缺点都是哪些?

答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
scala> "Hello world".take(3)
res26: String = Hel
scala> "Hello world".takeRight(3)
res27: String = rld
scala> "Hello world".drop(3)
res28: String = lo world
scala> "Hello world".dropRight(3)
res29: String = Hello wo
scala> "Hello world".take(3).drop(1)
res32: String = el

take,drop,takeRight,dropRight适合从两边处理字符串,很方便可以配合使用,substring适合处理中间的字符串。


参考:
《快学Scala》:http://book.douban.com/subject/19971952/

(转载本站文章请注明作者和出处 Vernon Zheng(郑雪峰) – vernonzheng.com ,请勿用于任何商业用途)