码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-10-30 00:45:30      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

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》

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

标签:

原文地址:http://www.cnblogs.com/xiaomingzaixian/p/4922162.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!