核心内容: 
1、For进阶实战 
2、Function(函数)进阶实战 
3、Lazy关键字的使用

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

                                                                           1、for进阶实战 

(1)嵌套循环的使用 
(2)for循环中加入条件表达式 
示例程序:

object App
{
  def main(args:Array[String])
  {
    //循环方式1
    for(i<- 1 to 2)for(j<- 1 to 2)println(i+"\t"+j);
    println;
    //循环方式2
    for(i<- 1 to 2;j<- 1 to 2) println(i+"\t"+j);
    println;
    
    //for循环中加入条件表达式
    for(i<- 1 to 2;j<- 1 to 2;if(i!=j)) println(i+"\t"+j);
  }
}

 程序输出:

Scala课程03

 

                                                                     2、Function(函数)进阶实战

(1)函数是有数值的,因此函数的右侧一般都有一个等号,等号的右侧(执行体)表示如何对函数进行计算 
(2)函数是有值的,即函数的执行必然有一个结果,因此函数可以作为函数的参数进行传递. 
(3)函数是有值的,因此函数可以赋值给一个常量:当我们将一个函数赋值给一个常量的时候,我们可以通过常量(匿名参数表达式)来调用函数,并为常量进行赋值, 
(4)匿名函数:在很多复杂的scala算法中,根本就不会给出函数的名字,因为我们只关心数据是如何进行计算的,而不关心函数的名字是什么. 
(5)大多数情况下我们都不会声明函数返回值的类型,因为scala编译器会根据函数的执行体自动推断函数返回值的类型,但是递归函数在scala中必须声明函数返回值的类型. 
(6)scala中的函数参数可以提供默认的数值 
(7)scala中的函数参数个数是可变的,可以有任意多个 
示例程序:
 

   //有名函数和匿名函数
       def add(x:Int,j:Int) = x + j;
       println(add(10,20));
       val aa = (x:Int,j:Int) => x + j;
       //调用匿名函数
       println(aa(10,20));

程序输出:

Scala课程03

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

object App {

  def main(args: Array[String]): Unit = {

    println(combine("spark"));
    println(combine("spark","<<",">>"));//默认的参数值可以被覆盖

  }

  //函数的形式参数可以提供默认的数值
  def combine(content:String,left:String="[",right:String="]")=left + content + right;


}

 程序输出:

Scala课程03

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

object App {

  def main(args: Array[String]): Unit = {

    println(connected(1,2));
    println(connected(1,2,3));

  }
  //函数的形式参数是可变的,可以有任意多个
  def connected(args:Int*)=
  {
    var result = 0;
    for(arg <- args) result += arg;
    result;
  }


}

 程序输出:

Scala课程03

                                                                     3、lazy关键字的使用 

(1)被lazy修饰的某个变量或常量,只有在第一次被使用的时候,才会被实变量例化. 
(2)当我们用lazy修饰某个变量或者常量的时候,这个变量或者常量就有一种延迟加载与延迟执行的行为,从而增大优化的范围与力度. 
示例程序:

object App
{
     def main(args:Array[String])
     {
       //(假设路径是不存在的,无lazy关键字)
       val file = Source.fromFile("D:\\word2.txt");
     }  
}

 程序输出:

Scala课程03

当我们加入lazy关键字:

object App
{
     def main(args:Array[String])
     {
       //(假设路径是不存在的,有lazy关键字)
       lazy  val file = Source.fromFile("D:\\word2.txt");
     }  
}

 程序不会抛出异常。

相关文章: