零既不是正数也不是负数。
正整数、零和负整数统称整数,正分数和负分数统称分数。
整数和分数统称有理数。
把一些数放在一起,就组成一个数的集合,简称数集。
所有正整数与零组成的数集叫做自然数集。
规定了原点、正方向和单位长度的直线叫做数轴。
在数轴上表示的两个数,右边的数总比左边的数大。
正数都大于零,负数都小于零,正数大于负数。
只有符号不同的两个数称互为相反数,零的相反数是零。
通常在一个数的前面添上“
”号,表示原来那个数的相反数。
”,即表示这个数的本身。
一个正数的绝对值是它本身
一个负数的绝对值是它的相反数。
两个负数,绝对值大的反而小。
同号两数相加,取相同的符号,并把绝对值相加。
绝对值不相等的异号两数相加,取绝对值较大的加数的符号,并用较大的绝对
互为相反数的的了两个数相加的零。
一个数于零相加,仍的这个数。
一个有理数由符号与绝对值两部分组成,进行加法运算时,应注意确定和的符
有理数的加法仍满足加法交换律和结合律。
加法交换律:两个数相加,交换加数的位置,和不变。
加法结合律:三个数相加,先把前两个数相加,或者先把后两个数相加,和不
目标,在本地启动一个项目,能够输出helloworld
官网提供的下载安装方式有很多种。
这里我安装了IDEA,就用了它。
创建项目的时候使用 sbt(Scala专用构建工具)
Scala可以创建具有常见内容填充的类。
大多数时候,当我们定义一个类时,我们必须编写toString,hashCode和equals方法。
Scala提供了用于填充这些空白的case类机制,以及支持模式匹配。
case类提供与普通类相同的功能,但编译器生成toString,hashCode和equals方法,您可以覆盖。
可以在不使用新语句的情况下实例化Case类。
默认情况下,case类的构造函数中的所有参数都成为case类的属性。
以下是创建case类的方法:
Scala没有静态成员。相反,Scala有单例对象。
单例对象定义看起来像一个类定义,除了使用关键字对象而不是关键字类。
单例是一个只能有一个实例的类。
例如,我们可以创建一个单例对象来表示一个Car,像这样:
将Car定义为一个对象,它只能有一个实例,我们可以像Java类上的静态方法一样调用它的方法:
与类不同,单例对象不能接受参数。
我们可以将singleton对象用于许多目的,包括收集相关的实用程序方法,或者定义一个到Scala应用程序的入口点。
有两种方法为应用程序创建启动点:使用正确定义的main方法定义对象,或定义对象或扩展
App
特性。对于第二种方法,定义一个扩展App trait的对象,如下所示:
Scala提供了一个trait,scala.你的singleton对象应该扩展以启动应用程序的应用程序。
然后你将放在main方法中的代码直接放在singleton对象中。
sTraits就像Java中的接口,它也可以包含代码。
在Scala中,当一个类从trait继承时,它实现trait的接口,并继承trait中包含的所有代码。
当一个类继承一个trait作为其父类时,也使用关键字extends。
即使当类使用with关键字在其他traits中混合时,也使用关键字extends。
此外,当一个trait是另一个trait或类的子对象时使用extends。
Scala支持单继承,而不是多重继承。
子类可以只有一个父类。
Scala类层次结构的根是Any,没有父类。
Vehicle类采用一个参数,即车辆的速度。
创建类Vehicle的实例时,必须传递此参数,如下所示:
该类包含一个方法,称为
race
如果构造函数参数声明为val,Scala只为它生成一个getter方法。
让我们声明一个字段为val,如下所示:
因为构造函数字段被定义为一个val,所以该字段的值是不可变的。因此,Scala只生成getter方法,没有setter方法。
如果构造函数参数声明为var,Scala将生成访问器和mutator方法。
我们可以改变Book对象的字段,因为它是用关键字var声明的。
- 参数声明为私有val或var
在这种情况下,字段只能从类的成员内访问:
我们可以为类定义一个或多个辅助构造函数,以提供创建对象的不同方法。
辅助构造函数通过创建名为this的方法来定义。
我们可以定义多个辅助构造函数,但它们必须有不同的签名。
每个辅助构造函数必须以对先前定义的构造函数的调用开始。
以下代码说明了一个主构造函数和两个辅助构造函数。
给定这些构造函数,可以通过以下方式创建同一本书:
辅助构造函数只需要调用先前定义的构造函数之一。
在Scala中,类和对象可以共享同一个名称。
当一个对象与一个类共享一个名称时,它被称为伴生对象,并且该类被称为伴生类。
伴生对象是与另一个类或特征共享相同名称和源文件的对象。
一个trait可以看作是一个Java接口。
这种方法允许我们在类上创建静态成员。
伴生对象对实现辅助方法和工厂很有用。
要实现一个创建不同类型的形状的工厂,我们可以在Scala中创建一个形状工厂。
我们使用一个伴生类Shape和一个伴生对象Shape,作为一个工厂。
闭包是一个函数,它的返回值取决于在该函数之外声明的一个或多个变量的值。
让我们创建一个乘法器函数如图所示:
现在,y具有对函数外部的变量的引用,但是在包围范围中。
在函数式编程语言中,调用带有参数的函数是将函数应用于参数。
当所有参数都传递给函数时,我们将函数完全应用于所有参数。
但是当我们只给函数一个子集的参数,表达式的结果是一个部分应用的函数。
因为我们没有为第二个参数提供值,所以变量部分Add是一个部分应用的函数。
当我们提供所有参数时,执行原始函数,产生结果。
Currying转换具有多个参数的函数,创建一个函数链,每个函数都需要一个参数。
要在包中使用声明,我们必须导入它们,就像在Java中一样。
Scala提供了其他选项,如下面导入Java类型的示例所示:
包是一个命名的代码模块。
Java和Scala惯例规定程序包名称是代码所有者的反向域名。
我们可以在包中使用下划线
_
作为通配符导入所有类型。我们还可以导入单个Scala或Java类型,如第二行所示。
Java使用“星号"字符
*
作为导入的通配符。在Scala中,此字符被允许作为方法名称,因此使用
_
来避免歧义。第三行导入java.io.File中的所有静态方法和字段。
最后,我们可以导入一个类或对象并重命名它。例如,您可以从scala.util.parsing.json包中导入JSON类/对象,并将其重命名为JsonParser:
import可以在任何代码块内部使用,导入将仅在该代码块的范围内有效。
例如,我们可以在类体中导入一些东西,如下面的代码所示:
例如,我们可以在类体中导入一些东西,如下面的代码所示:
这很像Java的静态导入。
组合局部范围导入和导入对象允许我们微调导入对象及其关联方法的位置。
Scala没有导入静态构造,因为它像其他类型一样对待对象类型。
我们可以将import语句几乎放在任何地方,以将它们的可见性限制在需要它们的地方。
我们可以在导入时重命名类型,我们可以禁止不需要的类型的可见性:
Scala导入是相对的。
请注意以下导入的注释:
数组是由相同类型的元素的集合组成的数据结构。
元素与索引相关联,索引通常为整数,用于访问或替换特定元素。
有两种方法来定义数组:指定元素的总数,然后将值分配给元素,或者我们可以一次指定所有值。
以下代码显示了如何创建一个可以包含三个元素的字符串数组。
这里书籍被声明为一个可以容纳三个元素的字符串数组。我们可以简化声明如下。
我们可以定义books数组并赋值如下。
我们可以使用如下所示的命令为各个元素赋值或访问各个元素:
数组的第一个元素的索引是数字0,最后一个元素的索引是元素的总数减去1。
在Scala列别中,所有元素都具有类似数组的类型,但与数组不同,列表的元素不能通过复制进行更改。
具有类型T的元素的列表被写为List[T]
有两种方法来创建列表:
- 以与创建数组类似的方法创建列表
首先我们将展示更传统的方法。以下代码显示了如何创建空列表。
注意,列表的类型是Nothing。
我们可以创建如下列代码所示的书籍列表:
这两个列表可以使用tail
Nil
和::
定义。可以使用Nil定义空列表。
书籍列表可以使用尾部Nil和::定义,如下面的代码所示。
列表上的操作可以用head和tail方法表示,其中head返回列表的第一个元素,tail返回一个由除第一个元素之外的所有元素组成的列表。
破案1101起查缴财物6.9亿元!江苏打击整治养老诈骗专项行动战果显著
破案1101起查缴财物6.9亿元!江苏打击整治养老诈骗专项行动战果显著