scala的特别之处

对于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,允许它作为参数出现,也允许他被赋值给一个变量,甚至还运行它作为一个返回值来进行回馈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值