知识点:

Scala程序并不是一个解释器,实际发生的是,你输入的内容被快速的编译成字节码,然后这段字节码交由Java虚拟机执行。

以val定义的值是一个常量,以var定义的值是一个变量,声明值或变量但不做初始化会报错。

变量或函数的类型总是写在变量或函数名称的后面。

Scala中,仅当同一行代码中存在多条语句时才需要用分号隔开。

Scala有7种数值类型:Byte、Char、Short、Int、Long、Float、Boolean,这些类型是类。在Scala中不需要包装类型,在基本类型和包装类型之间的转换是Scala编译器的工作,比如,Scala用底层的java.lang.String类表示字符串,通过StringOps类给字符串加很多操作。类似,还有RichInt、RichDouble、RichChar提供了原始类不具备的方法。BigInteger和BigDecimal对应的是java.math.BigInteger java.math.BigDecimal.

Scala没有++和--,需要+=1和-=1.Java中不能对操作符重载,在Scala中是可以定义操作符的。

Scala中调用函数时,一般没有参数且不改变当前对象的方法不带圆括号。

练习:(参考了网上的答案呢,自己敲一遍练一下)

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

  1. scala> 3.
  2. != > floatValue isValidInt to toRadians
  3.  
  4. % >= floor isValidLong toBinaryString toShort
  5.  
  6. & >> getClass isValidShort toByte unary_+
  7.  
  8. * >>> intValue isWhole toChar unary_-
  9.  
  10. + ^ isInfinite longValue toDegrees unary_~
  11.  
  12. - abs isInfinity max toDouble underlying
  13.  
  14. / byteValue isNaN min toFloat until
  15.  
  16. < ceil isNegInfinity round toHexString |
  17.  
  18. << compare isPosInfinity self toInt
  19.  
  20. <= compareTo isValidByte shortValue toLong
  21.  
  22. == doubleValue isValidChar signum toOctalString

2.计算3的平方根,再求平方,计算这个值离3差多少。

  1. scala> scala.math.sqrt(3)
  2. res0: Double = 1.7320508075688772
  3. scala> res0*res0
  4. res1: Double = 2.9999999999999996
  5. scala> 3-res1
  6. res2: Double = 4.440892098500626E-16

3.res变量时var还是val?

试一下不就知道了~~给res重新赋值出现错误,说明是val。

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

  1. scala> "hello"*3
  2. res3: String = hellohellohello

说明“*”是字符串的一个方法,首先是一个String,所以直接查找StringOps类,然后搜索“*”,即可找到啦。

  1. def *(n: Int): String
  2. Return the current string concatenated n times.

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

  1. scala> 10 max 2
  2. res4: Int = 10

根据书中的查找DOC的经验,首先是数值类型,在左侧栏搜索 int ,在右侧栏Int类的介绍下的搜索框搜索 max就可以找到相应的解释。

  1. def max(that: Int): Int
  2. returns this if this > that or that otherwise

Definition Classes RichIntScalaNumberProxy

6.用BigInt计算2的1024次方。

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

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

import scala.math.BigInt._; import scala.util.Random

8.创建随机文件的方式之一是生成一个随机的BigInt,然后将他转换成三十六进制,输出类似“qsnvbevtomcj38o06kul”这样的字符串,查阅scaladoc,找到实现该逻辑的办法。(首先要导入BigInt和Random)

  1. scala> BigInt(Random.nextInt).toString(36)
  2. res11: String = -121h7l

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

  1. scala> "Scala"(0)
  2. res15: Char = S
  3. scala> "Scala".take(1)
  4. res16: String = S
  5. scala> "Scala".reverse(0)
  6. res17: Char = a
  7. scala> "Scala".takeRight(1)
  8. res18: String = a

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

  1. def take(n: Int): String
  2. Selects first n elements.
  3. def drop(n: Int): String
  4. Selects all elements except first n ones.
  5.  
  6. def takeRight(n: Int): String
  7. Selects last n elements.
  8. def dropRight(n: Int): String
  9. Selects all elements except last n ones.

scala> "Scala".take(3).drop(1)

res19: String = ca

如上的四个方法都是单向求取其中的子字符串,如果需要求中间的字符,则需要用两个函数结合起来,没有subString方便。

快学Scala-第一章 基础的更多相关文章

  1. 快学Scala第一部分

    转载: 1.变量声明 val answer = 8 * 5 + 2; //常量 var counter = 0;    //变量 //在必要的时候 ,可以指定类型 val greeting:Strin ...

  2. 快学Scala 第一课 (变量,类型,操作符)

    Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...

  3. 快学Scala习题解答—第一章 基础

    1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...

  4. 《快学Scala》

    Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/S ...

  5. 《openssl编程》:第一章基础知识

    第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...

  6. .net架构设计读书笔记--第一章 基础

    第一章 基础 第一节 软件架构与软件架构师  简单的说软件架构即是为客户构建一个软件系统.架构师随便软件架构应运而生,架构师是一个角色. 2000年9月ANSI和IEEE发布了<密集性软件架构建 ...

  7. Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考

    第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...

  8. Linux系统shell编程自学_第一章基础

    第一章 基础shell的优势在于处理操作系统底层的业务,Python,php的优势在于开发运维工具,web界面的管理工具以及web业务开发.处理一键安装.优化.报警脚本shell又叫命令解释器,它能识 ...

  9. wpf(第一章 基础知识)

    wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案 ...

随机推荐

  1. ubutun下安装jenkins

    安装方法所在网址:   https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu 在安装jenkins之前,ub ...

  2. OC之消息调用过程

    Bird * aBird = [[Bird alloc] init]; [aBird fly]; 中对 fly 的调用,编译器通过插入一些代码,将之转换为对方法具体实现 IMP 的调用,这个 IMP ...

  3. tableviewcell 中使用autolayout自适应高度

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { [ce ...

  4. C#整理 条件语句

    条件语句主要分为if else语句和switch case语句. if else语句主要分为四种格式: 1. if(表达式) {} 2.二选一 if(表达式) {} else {} 3.多选一 if( ...

  5. Alyona and a tree

    Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. Apache Commons DbUtils 快速上手

    原文出处:http://lavasoft.blog.51cto.com/62575/222771 Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了 ...

  7. VBS基础篇 - 对象(3) - FileSystemObject对象

    VBS基础篇 - 对象(3) - FileSystemObject对象   文件系统是所有操作系统最重要的部分之一,脚本经常会需要对文件及文件夹进行访问和管理,在Vbs中对桌面和文件系统进行访问的顶级 ...

  8. MySQL 不允许从远程访问的解决方法

    解决方法: 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 ...

  9. ASP.NET弹出提示点击确定之后再跳转页面的方法

    //ASP.NET弹出提示点击确定之后再跳转页面的方法 //弹出了提示并且通过location.href转到了DeskTop.aspx页面 Response.Write("<scrip ...

  10. C# Memcached缓存

    net/c#分布式缓存系统Memcached简介与实践--非常好 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是 ...