• Scala学习之For、Function、Lazy(4)


    1.for的使用

    for的使用在各种编程语言中是最常见的,这里只是聊聊for在Scala中的表现形式,由于Scala语言是完全面向对象的,所以直接导致for的不同呈现,下面举几个例子说明一下

    object For {

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

        for(i<-1 to 2;j<-1 to 2)

          println("i is:"+i+"   j is:"+j)

        println("----------------------------------")

        for(i<-1 to 2;j<-1 to 2 if i!=j)

          println("i is:"+i+"  j is:"+j)

      }

    }

    该代码最后的输出结果为:

    在这里解释一下” 1 to 2”,它的实质是”1.(2)”,即对象1调用数字2(意思是1到2),表现出了Scala完全面向对象编程,操作符”<-”是类似于C语言中的指针,意思是指向 。其次,从上面的例子,我们可以看出,在Scala中,for的呈现方式,优化了在C、C++、Java中的for循环嵌套,缩短了代码量。方便、简洁!

    2.Function

    function即函数,这里我们讲讲函数的声明方式。

    object Function {

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

        /*1.函数有名(可以不用声明函数的类型)*/

        def addNum(x:Int)=x+10

        println("在函数addNum中最后返回的值为:"+addNum(10))

        /*2.函数匿名(可以不用声明函数的类型)*/

        val add=(x:Int)=>x+20

        println("在匿名函数中最后的返回值为:"+add(10))

        /*3.递归算法(必须声明函数的类型)*/

        def fac(n:Int):Int=if(n<=0)1 else n*fac(n-1)

        println("当n=5时该递归算法的最后的结果为:"+fac(5))

        /*4.初始化参数和参数覆盖*/

        def combine(content:String,left:String="[",right:String="]")=left+content+right

        println("当只有一个参数时:"+combine("I am xiaoming"))

        println("当有两个参数时:"+combine("I am xiao ming","("))

        println("当有三个参数时:"+combine("I am xiao ming","(",")"))

      }

    }

    其输出结果为:

    我在代码中都写了注释,但我还是得强调一下,在我们用递归函数算法时,由于在递归算法中是算法嵌套,Scala也不能识别其结果终究是什么类型,所以,我们在定义函数时,务必要带上我们需要的函数返回值类型

    3.Lazy

    lazy即懒值,Scala中通过lazy关键字来定义惰性变量,惰性变量只能是不可变变量。例如下面,只有在调用惰性变量b的toString方法的时候,才会去实例化b这个变量。可以看到“Test”是先打印出来的。

    class Book(name:String){

          println("new book"+name)

      override def toString() = "《"+name+"》"

    }

      lazy val b = new Book("Java")

      println("Test")

      println(b.toString)

    }

    其输出结果为:

    Test

    new bookJava

    《Java》

  • 相关阅读:
    Unity Behaviors for Interception
    Unity Method Dependency Injection
    Unity的AdditionalInterfaces问题
    Unity的三种Interceptor
    C#实现office文档转换为PDF或xps的一些方法
    多级菜单CSS+DIV
    应用软件系统架构设计的“七种武器”(转)
    AjaxModalPopupExtender
    越来越苦,献给狗日的小温
    NHibernate教程
  • 原文地址:https://www.cnblogs.com/xiaomingzaixian/p/4922162.html
Copyright © 2020-2023  润新知