快学Scala-第一章 基础

知识点:

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键,有哪些方法可以被应用?

scala> 3.
!=   >             floatValue      isValidInt     to               toRadians

%    >=            floor           isValidLong    toBinaryString   toShort

&    >>            getClass        isValidShort   toByte           unary_+

*    >>>           intValue        isWhole        toChar           unary_-

+    ^             isInfinite      longValue      toDegrees        unary_~

-    abs           isInfinity      max            toDouble         underlying

/    byteValue     isNaN           min            toFloat          until

<    ceil          isNegInfinity   round          toHexString      |

<<   compare       isPosInfinity   self           toInt

<=   compareTo     isValidByte     shortValue     toLong

==   doubleValue   isValidChar     signum         toOctalString

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

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

3.res变量时var还是val?

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

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

scala> "hello"*3
res3: String = hellohellohello

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

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

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

scala> 10 max 2
res4: Int = 10

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

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

Definition Classes RichIntScalaNumberProxy

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

scala> BigInt(2).pow(1024)
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)

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

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

scala> "Scala"(0)
res15: Char = S
scala> "Scala".take(1)
res16: String = S
scala> "Scala".reverse(0)
res17: Char = a
scala> "Scala".takeRight(1)
res18: String = a

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

def take(n: Int): String
Selects first n elements.
def drop(n: Int): String
Selects all elements except first n ones.

def takeRight(n: Int): String
Selects last n elements.
def dropRight(n: Int): String
Selects all elements except last n ones.

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

res19: String = ca

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

时间: 2024-08-08 14:12:11

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

快学Scala第一部分

转载: 1.变量声明 [java] view plaincopy val answer = 8 * 5 + 2; //常量 var counter = 0;    //变量 //在必要的时候 ,可以指定类型 val greeting:String = null val greeting:Any = "Hello" //可以将多个值或变量放在一起声明 val xmax, ymax = 100 //xmax 和 ymax设为100 var greeting, message:String 

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

Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和变量可以一起声明: Scala 类型:Byte, Char, Short, Int, Long, Float, Double, Boolean Scala不区分基本类型和引用类型(包装类型) Scala StringOps类给字符串追加了上百种操作,所以在"Hello".intersect

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

1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on the Java Virtual Machine>好很多. 是本不错的入门书.而且每个章节都设置了难度级别,每章有习题,可以巩固Scala语法. 本文的目的就是针对这些习题进行解答 2 基础 2.1 在Scala REPL中键入3,然后按Tab键.有哪些方法可以被应用? 这个....直接操作一遍就有结果了.

快学scala 第十一章 操作符 读书笔记及习题答案代码

chapter 11 操作符 标签:快学scala 一.笔记 scala种可以在反引号中包含几乎任何字符序列, val 'val' = 42 所有的操作符都是左结合的,除了以冒号(:)结尾的操作符,和赋值操作符.用于构造列表的::操作符是又结合的.1::2::Ni1的意思是1::(2::Ni1),先创建出包含2的列表,这个列表又被作为尾巴拼接到以1作为头部的列表中. 2. 函数调用语法:f(arg1, arg2,...)扩展到可以应用于函数之外的值,如果f不是函数或方法,那么这个表达式等于f.a

快学scala笔记.

第一章 基础 val 定义的值实际上是一个常量 var 声明其值可变的变量 val xmax,ymax = 100 var greeting,message: String = null 1.3 常用类型 Scala的7种数值类型:Byte.Char.Short.Int.Long.Float和Double 1.toString() 2.to(10) "Hello".intersect("World") 1.4 算术和操作符重载 val answer = 8 * 5

libgdx游戏引擎3D开发教程-第一章-基础教程

开卷语:我最近才开始学习游戏编程,因为想做个网游玩,所以前几天找了不少引擎来看,于是不出意料的选中了libgdx,值得感谢的是libgdx的文档很多很全,所以没有走多少弯路就成功的配置好了环境.基础教程很完善,好多大神都已经写的很详细了,但是3D方面的很少见,所以我正好要学,索性直接翻译过来,大家共同进步.注意:教程基本是从Wiki上翻译过来,外加自己的小部分理解,所以一般来说应该没什么问题,如有错误请多多指教. =========================================

快学Scala 第十九课 (trait的abstract override使用)

trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super.log依旧是个abstract class,所以必须在方法前加上abstract和override.但是并没有具体介绍如何使用,然后查阅了其他文档,才明白使用方法. 下面的代码定义了超类LoggerEmpty,这个定义意味着该特质只能混入扩展LoggerEmpty的类中. 在特质中声明抽象方法中有

wpf(第一章 基础知识)

wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案中生成如下的结构: 1.程序起始相关的资源:2.与整个wpf相关的后台代码:3.窗体界面:4.窗体界面的后台代码. 在app.xaml中 1.Application的后台类:2.启动窗体:3.系统资源区域 除此之外可以在MainWindow.xaml中自定义窗体设置属性,拖拉控件在里面.

快学Scala课后习题答案

分享一个之前做快学Scala的课后习题(2-21章节,19无)的Github链接,我把习题的文字写在了每个回答的注释上面,这样方便大家对照着看,省的回过头去对照着pdf看了,如果有做的不对的地方希望大家给予指正. 链接如下,http://github.com/fxxkinglife/scala-hello. 举一个第二章节的例子, object charpter02 { /* * 2.1 * 一个数字如果为正数,则它的signum为1; * 如果是负数,则signum为-1; * 如果为0,则s