Scala笔记


1.在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void

 val n = if (1 < 2) ()
 println(n)

2.在scala中{}中可包含一系列表达式,块中最后一个表达式的值就是块的值

//下面就是一个块表达式
    val result = {
      if (x < 0){
        -1
      } else if(x >= 1) {
        1
      } else {
        "error"
      }
    }
 //result的值就是块表达式的结果
    println(result)

3.高级for循环:每个生成器都可以带一个条件,注意:if前面没有分号

for(i <- 1 to 3; j <- 1 to 3 if i != j)
      print((10 * i + j) + " ")
    println()

 4.for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合

//每次迭代生成集合中的一个值
    val v = for (i <- 1 to 10) yield i * 10
    println(v)

5.Scala中的+ - * / %等操作符

Scala中的+ - * / %等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有

一点特别的:这些操作符实际上是方法。例如:

a + b

是如下方法调用的简写:

a.+(b)

a 方法 b可以写成 a.方法(b)

6.将方法转换成函数(神奇的下划线)

方法名 空格 下划线

7.好用的until会生成脚标,0 until 10 包含0不包含10

8.在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的

1.存放工具方法和常量

2.高效共享单个不可变的实例

3.单例模式

在Scala的类中,与类名相同的对象叫做伴生对象,类和伴生对象之间可以相互访问私有的方法和属性

通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1,...参数n)时apply方法会被调用

9.在Scala中,你不需要给每一个函数命名,没有将函数赋给变量的函数叫做匿名函数

 

由于Scala可以自动推断出参数的类型,所有可以写的跟精简一些

 

还记得神奇的下划线吗?这才是终极方式

 

10.柯里化指的是将原来接受两个参数的方法变成新的接受一个参数的方法的过程

11.隐式转换函数是指那种以implicit关键字声明的带有单个参数的函数