本帖最后由 yuxuanchiadm 于 2019-7-19 13:08 编辑 
【索引贴】https://www.mcbbs.net/thread-887515-1-1.html
布尔值
布尔值 类型是有2个值得的类型,分别为false和true,是编程中最常用的数据类型 之一,很多其他的数据类型都存在返回布尔值的函数,例如对于数值类型,你可以调用其比较大小的函数,并返回一个布尔值:
复制代码注意这里的“>=”标识符其实代指的是一个函数。只不过因为其定义在Int类型中,而且除了一个Int类型自身的值“this”以外只有一个参数,所以可以使用中缀方式,省略括号来调用。在后面的章节中将介绍如何在数据类型中定义函数。
条件以及循环
条件表达式 根据一个布尔值,来从2个表达式中选择一个表达式的值作为其值,如果没有else分支,则条件为“false”是默认为Unit值“()”:
复制代码循环表达式 分为2种,While循环表达式 和Do循环表达式 。这两种表达式的值均为Unit类型的值“()”,且都是对一个类型为布尔值的表达式,称之为循环条件 ,以及一个Unit类型的表达式,称之为循环体 进行多次求值,直到其循环条件表达式的值为“false”为止。区别在于While循环表达式的循环体可以一次都不执行,而Do循环表达式的循环体至少执行一次:
复制代码
Range以及列表解析
Range类型是一种Int类型的特殊集合类型,用于构造一个Int的区间,例如:
复制代码其中使用to的称之为Inclusive Range,而使用until的称之为Exclusive Range,区别在于构造的区间是否包含上界,by用于指定其单次迭代的步数。例如对于“0 until 10 by 2”,会构造包含“0 2 4 6 8”的Range。
列表解析 表达式是Scala中复杂,但是重要的表达式。列表解析会使用4个跟所解析的数据类型相关的4个函数来实现其功能:map、flatMap、withFilter以及foreach。列表解析不光能用于Range,任何实现或部分实现了这4个函数的数据类型都可以进行列表解析,所以列表解析实际上是一种语法糖,编译器会把列表解析表达式翻译成对这些函数的调用。
列表解析大体上分为两种用法,第一种用法是当作For循环 来使用,此时整个表达式的值,一般来说(一般来说不会出现反例,除非有人在搞事)为Unit值“()”。其语法入下例所示:
复制代码另一种用法是对数据类型进行变换,计算出新的数据类型。此时整个表达式的值,一般来说(也就是说会有反例)为yield关键字后面的值的类型的集合。至于具体的集合是什么类型,一般来说(也就是说会有反例)跟你变换前的集合的类型是同一个类型。其语法如下例所示:
复制代码当然列表解析是可以嵌套的:
复制代码顺带一提,列表解析也是某个"M" word thing的语法糖,其具体的用法将在第四章进行解释。
【索引贴】https://www.mcbbs.net/thread-887515-1-1.html
布尔值
- val b: Boolean = 1 >= 2
条件以及循环
- val s: String = if (b) "foo" else "bar"
- var i: Int = 0
 
- while (i < 10) i += 1
 
- do i /= 2 while (i % 2 != 0)
Range以及列表解析
Range类型是一种Int类型的特殊集合类型,用于构造一个Int的区间,例如:
- 0 to 10
 
- 0 until 10
 
- 0 to 10 by 2
 
- 0 until 10 by 2
列表解析大体上分为两种用法,第一种用法是当作
- for (i <- 0 to 10) println(i)
 
- for {
 
-   i <- 0 to 10
 
-   j <- 0 to 1
 
-   t = (i, j)
 
- } println(t)
 
- for {
 
-   i <- 0 to 10
 
-   if i % 2 != 0
 
- } println(i)
- for (i <- 0 to 10) yield i
 
- for {
 
-   i <- 0 to 10
 
-   j <- 0 to 1
 
-   t = (i, j)
 
- } yield t
 
- for {
 
-   i <- 0 to 10
 
-   if i % 2 != 0
 
- } yield i
- for {
 
-   i <- for (i <- 0 to 10) yield i
 
-   if i % 2 != 0
 
- } println(i)
 
谢谢分享,学习了,,,
好复杂