Scala基础


image


数据类型

描述

Byte

8位有符号补码整数。数值区间为 -128 到 127

Short

16位有符号补码整数。数值区间为 -32768 到 32767

Int

32位有符号补码整数。数值区间为 -2147483648 到 2147483647

Long

64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807

Float

32 位, IEEE 754标准的单精度浮点数

Double

64 位 IEEE 754标准的双精度浮点数

Char

16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF

String

字符序列

Boolean

true或false

Unit

表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。

Null

null

Nothing

Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。

Any

Any是所有其他类的超类

AnyRef

AnyRef类是Scala里所有引用类(reference class)的基类




使用细节和注意事项

1) Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short)

2) Unit类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit类似于Java里的void。Unit只有一个实例,(),这个实例也没有实质的意义

3) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容。

4)当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换(隐式转换 implicit conversion)。

5) (byte, short) 和 char之间不会相互自动转换。byte,short,char 他们三者可以计算,在计算时首先转换为int类型。


image


运算符

1)Scala中是没有三元运算符,因为可以这样简写 : val result = if (flg) 1 else 0

2)范围数据循环

for(i <- 1 to 3){

  print(i + " ")

}

println()

------------------------------------

for(i <- 1 until 3) {

  print(i + " ")

}

println()

------------------------------------

3)循环守卫

for(i <- 1 to 3 if i != 2) {

  print(i + " ")

}

println()

------------------------------------

4)引入变量

for(i <- 1 to 3; j = 4 - i) {

  print(j + " ")

}

------------------------------------

5)嵌套循环

for(i <- 1 to 3; j <- 1 to 3) {

  println(" i =" + i + " j = " + j)

}

6)循环返回值

val res = for(i <- 1 to 10) yield i * 2

println(res)

将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字

7)使用花括号{}代替小括号()

var retVal = for{ a <- numList
                           if a != 3; if a < 8
                        }yield a

(1){}和()对于for表达式来说都可以

(2)for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用圆括号,当其包含多个表达式时使用大括号

(3)当使用{} 来换行写表达式时,分号就不用写了

8)scala 的for循环的步长如何控制! [for(i <- Range(1,3,2)]


9)while和do…while中没有返回值,所以不推荐使用,而是推荐使用for循环


10)Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数化编程,推荐使用函数式的风格解决break和contine的功能,而不是一个关键字。

image

image


集合(不可变)

image


集合(可变)

    image


多维数组的定义和使用

//定义

val arr = Array.ofDim[Double](3,4)

//赋值

arr(1)(1) = 11.11

原文地址:https://www.cnblogs.com/gispathfinder/p/12701122.html