scala的特别之处

来源:互联网 发布:大数据平台功能设计 编辑:程序博客网 时间:2024/04/29 08:14

对于java程序员来说,最新鲜的一点是function也是object。这意味着function也可以当成value一样进行传递。Function are also object  in Scala.It is therefore possible to pass funjction as arguments, to store them in variables, and to return them from other functions.

对C语言还有印象的人应该还记得call-back function(回调函数)这个东西。他其实就相当于把函数当做值来传递,不过在C中传递的是这个函数的地址。


object Timer{def once PerSecond(callback:()=>Uint){while(ture){callback();Thread sleep 100}}def timeFlies(){println("time flies like an arrow...")}def main(arg:Array[String]){oncePerSecond(timeFlies)}}

可以看出 timeFlies函数被当做回调函数注册给了oncePerSecond.这种方式跟c很像,不过,这里面其实有点浪费,因为timeFiles函数其实根本不需要名字,因为它只在一个特定的地方用到了。如果把它想象成“一团东西”,那么只有把“这团东西”塞到他应该呆的位置即可,根本不会有人关心它叫什么名字。

这样,就产生了anonymous function(匿名函数),如下:

object TImeAnonymous{

def oncePerSecond(callback: ()=>Unit){

while(ture) { callback();Thread sleep 1000}

}

def main(args:Array[String]){

oncePersecond(    () => println("time flies likes an arrow"))

}  

}

可以看到  ()=>println("time flies like an arrow") 就是一个匿名函数,被当成是一个object ,直接塞给了oncePerSecond,这个做法跟javascript的匿名函数很像。



总结:Scala在java的基础之上,将面向对象的“万物皆为对象”的思想更推进了一步,把function也视为object,允许它作为参数出现,也允许他被赋值给一个变量,甚至还运行它作为一个返回值来进行回馈。