Scala学习笔记07【For、Scala函数进阶】

Scala中for常用实例

for(i <- 1 to 3; j <- 1 to 3) 
  print((1000*i + j) + "\t")                    
//结果为:1001 1002 1003 2001 2002 2003 3001 3002 3003


for(i <- 1 to 3; j <- 1 to 3 if i!= j)  //"if i!= j"条件表达式可在此使用
  print((1000*i + j) + "\t")                    
//结果为:1002 1003 2001 2003 3001 3002

Scala函数定义进阶

object For_Function_Advanced{

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

        def addA(x : Int) = x + 100 //自动推断函数返回值为Int
        val add = (x : Int) => x + 200  //"(x : Int) => x + 200"匿名函数 直接作为值进行传递
        println("addA()___result:" + addA(99))  //addA()___result:199
        println("add___result:" + add(98))      //add___result:298



        //递归实例
        def fac(n: Int): Int = if(n <= 0) 1 else n * fac(n - 1)
            println("fac(8): " + fac(8))    //fac(8): 40320


        //函数参数设置默认值
        def combine(mid : String, left : String = "[", right : String = "]") = left + mid + right
            println("Result:" + combine("I am hungry")) //Result:[I am hungry]
            println("Result:" + combine("I am hungry", "<<", ">>"))    //Result:<<I am hungry>> 覆盖了默认参数值



        //参数个数不固定的函数
        def connected(args: Int*) = {
            var result = 0
            for(arg <- args)
                result += arg
                result
        }
        println("Result: " + connected(1, 2, 3, 4, 5))  //Result: 15
        println("Result: " + connected(1, 2, 3, 4, 5, 6))   //Result: 21
    }
}

Scala中的lazy val

Scala中通过lazy关键字来定义惰性变量,惰性变量只能是不可变变量。
只有在调用惰性变量方法的时候,才会去实例化这个变量。
lazy实例:

object LazyTest{

    def main(args: Array[String]):Unit = {
        lazy val file = Source.fromFile("C:\\xxx.txt")  // lazy val 惰性变量

        for(line <- file.getLines)                  //当要调用file->getLines时才真正定义file
            println(line)
        }
}

你可能感兴趣的:(scala,函数,for,Scala-lazy)