设为首页收藏本站

小牛社区-大数据学习交流社区|大数据免费学习资源

 找回密码
 立即注册!

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1363|回复: 0

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

[复制链接]

3205

主题

3588

帖子

1万

积分

管理员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
15121
发表于 2016-6-12 12:55:14 | 显示全部楼层 |阅读模式
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》

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册!

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册!

本版积分规则

快速回复 返回顶部 返回列表