scala-session 2

  • Post author:
  • Post category:其他


  1. 条件表达式

    在这里插入图片描述

第一种写法更好,因为它可以用来初始化一个val。而在第二种写法中必须是var。

在这里插入图片描述

如上一个分支是java.lang.String,而另一个分支是Int,它们的公共超类型叫做Any。

在这里插入图片描述

如果else部分缺失,引入一个Unit类,写作(),当做java或者C++中的void。不带else的这个if语句等同于

在这里插入图片描述

  1. 语句终止

    行尾的位置上不需要分号,除非如下情况:

    在这里插入图片描述

  2. 块表达式和赋值

    在scala中,{}块包含一些列表达式,其结果也是一个表达式。块中最后一个表达式的值就是块的值。

    这个特性对于那种对某个val的初始化需要分多步完成的情况很有用。例如:

    在这里插入图片描述

  3. 输入输出

    print(“Hello”)

    println(“Hello”) #此值后面带换行符号

    print(f”Hello,$name!you will be



    a

    g

    e

    +

    0.5

    使

    f

    {age + 0.5}%7.2f years old.%n”) 使用字符串插值,被格式化的字符串以字母f打头。它包含以







    a


    g


    e




    +




    0


    .


    5



    使
























































    f


























    打头,并且可能带有C风格的格式化字符串的表达式。而表达式${age + 0.5}%7.2f被替换成age+0.5的值,并以宽度为7、精度为2的浮点数格式化。

    可以使用scala.io.StdIn的readLine方法从控制台读取一行输入。如果要读取数字、Boolean或者是字符,可以用readInt、readDouble、readByte、readShort或readChar。

  4. 循环

    一是使用while循环,二是使用for循环

    在这里插入图片描述

for(i <- 表达式) #让变量i遍历<-右边的表达式的所有值。

for循环的变量i并没有val或var的指定。该变量的类型是集合的元素类型。循环变量的作用域一直持续到循环结束。

scala并没有提供break或者continue语句来退出循环。有如下几个选项来处理:

 使用Boolean型的控制变量

 使用嵌套函数—可以从函数中return

 使用Breaks对象中的break方法

6. 高级for循环

可以以变量<-表达式的形式提供多个生成器,用分号将它们分隔开。

在这里插入图片描述

每个生成器都可以带上守卫,一个以if开头的Boolean表达式。注意在if之前并没有分号。

在这里插入图片描述

可以使用任意多的定义,引入可以在循环中使用的变量。

在这里插入图片描述

如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值。

在这里插入图片描述

这类循环叫做for推导式。

7. 函数

在这里插入图片描述

除了函数内部有递归函数,否则就不需要指定函数返回类型。

8. 默认参数和带名参数

带名参数更加可读。

9. 变长参数

在这里插入图片描述

函数得到的是一个类型为Seq的参数。

10. 过程

scala对于不返回值的函数有特殊的表示法。如果函数体包含在花括号当中但没有前面的=号,那么返回类型就是Unit。这样的函数就称作过程。

11. 懒值

当val被声明为lazy时,它的初始化将被推迟,直到首次对它取值。

在这里插入图片描述

懒值并非没有额外开销。我们每次访问懒值时,都会有一个方法被调用,而这个方法将会以线程安全的方式检查该值是否已经被初始化。

12. 异常

在这里插入图片描述

finally语句不论process函数是否抛出异常都会被执行,reader总会被关闭。如上代码提出一些问题:

 如果URL构造器或openStream方法抛出异常怎么办?这样一来try代码块和finally语句都不会被执行。

 为什么val in=new URL().openStream()不放在try代码块里?因为这样做的话,in的作用域不会延展到finally语句当中。

 如果in.close()抛出异常怎么办?这样一来异常跳出当前语句。

注意:try/catch和try/finally的目的是互补的。try/catch语句处理异常,而try/finally语句在异常没有被处理时执行某种动作(通常是清理工作)。



版权声明:本文为weixin_51021105原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。