【快学Scala】第 1 章 基础

来源:互联网 发布:安卓跑团dnd软件 编辑:程序博客网 时间:2024/06/02 00:39

内容要点

  1. 安装Scala,这个没有什么好说的,去官网下,然后点下一步,也不用配路径,反正我用的exe安装,路径已经配好了。

  2. Scala中有特别区分值(val)和变量(var),而且声明时必须初始化。

    val x, y = 100 // x=100, y=100var a, b : String = null
  3. 常用类型: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 …),丧心病狂地添加了好多超有用的方法。

  4. 操作符归到方法一起,就是说你可以定义操作符。Scala不提供++--,只能用+=1或者-=1

  5. 导入包,以scala.开头的包可以省去前缀,即下面两种写法等同。

    import scala.math._ // _等同于Java中的*import math._

    Scala没有静态方法(…),但提供了单例对象和伴生对象(…什么鬼)。

  6. apply方法是()操作符的重载,比如下面两种方法等同。

    "Hello"(4) // 返回o"Hello".apply(4)
  7. Scala也有自己的文档,Scaladoc,没事就瞅瞅吧。

练习

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

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

  3. res变量是val还是var?
    ,,ԾㅂԾ,, 反正我用的val,既然不打算改变它的值就用val。

  4. Scala允许你用数字去乘字符串,去REPL中试一下"carry" * 3。这个操作做什么?在Scaladoc中如何找到这个操作?
    practice1.4.1
    首先,Java的String类肯定是不能这么用*操作符的,那么就是Scala中对应的扩展类StringOps里面定义的了。我们去Scaladoc中搜索一下,就找到啦↓↓↓
    practice1.4.2

  5. 10 max 2的含义是什么?max方法定义在哪个类中?
    practice1.5.1
    哪个类?还是去Scaladoc搜一下吧。
    practice1.5.2

  6. 用BigInt计算2的1024次方。
    practice1.6
    哦,忘了说BigInt(2)可以产生一个BigInt对象,用的是BigInt伴生对象的apply方法,就不用写new啦。

  7. 为了在使用probablePrime(100, Random)获取随机素数时不在probablePrime和Random之前使用任何限定符,你需要引入什么?
    照例,搜一波
    practice1.7.1
    practice1.7.2
    practice1.7.3

  8. 创建随机文件的方式之一时生成一个随机的BigInt,然后将它转换乘三十六进制,输出类似“dsfalkfjlksdajf”这样的字符串。查阅Scaladoc,找到在Scala中实现该逻辑的方法。
    首先,要由BigInt转成一个字符串,那么我们可以看看BigInt的toString方法有没有重载的,忒么一下就找到了……真是没有成就感呀。
    practice1.8

  9. 在Scala中如何获取字符串的首字符和尾字符。
    practice1.9

  10. take、drop、takeRight和dropRight这些字符串函数是做什么用的?和substring相比,它们的优点和缺点有哪些?
    practice1.10.1
    practice1.10.2
    优点和缺点……不知道。take(n)可以看成substring(0, n),即固定了一个起始位置。那么这些方法适合从头或者尾开始来截取字符串,substring适合任意位置截取。感觉take或者drop方法会用的比较多。

原创粉丝点击