Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6090214
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: Java

2013-01-21 10:14:15

在Scala中,一切皆对象!比Java的面向对象理念还彻底!
Scala里,数字是对象,函数也是对象!

数字是对象
比如:1 + 2 * 3 / 2,和下面这个是一样的:
(1).+(((2).*(3))./(2))



可以看出,“+,“-,“*,“/在Scala中同样是有效的名称。
在第二个表达式中的这些括号是必须的,因为 Scala 的分词器使用最长规则来进行分词。所以它会把下面的表达式: 
1.+(2)
理解成表达项“1.+,和“2的组合。这样的组合结果是由于“1.是一个有效的表达项并且比表达项“1要长,表达项“1.会被当作“1.0,使得它成为一个double类型而非int类型。而下面的表达式阻止了分析器错误的理解:
(1).+(2)

函数是对象
把函数当成值进行操作是函数型编程语言的基石。 
函数在Scala语言里面是一个对象,把函数作为参数进行传递,把它们存贮在变量中,或者当作另一
个函数的返回值都是可能的。
函数是对象,将给Scala填上无穷的威力,这点是Java语言做不到的。
来看个计时器的例子:

object Timer {
   
   def oncePerSecond(callback: () => Unit{
       while (true{callback(); Thread sleep 1000 }
   }
   
   //作为回调的函数
   def timeFlies() {
       //使用预定义的函数println,而非使用System.out.println(...)
       println("每秒都打印一下..")
   }
   
   //主函数调用计时器并传递打印句子的函数作为回调,这个程序永无止境的每秒打印一句话
   def main(args: Array[String]) {
       oncePerSecond(timeFlies)
   }
}

运行如下:


用匿名函数改进定时器程序
上面的定时器函数完全可以用匿名函数写得更简洁一些的。

object TimerAnonymous {
   def oncePerSecond(callback: () => Unit{
       while (true{callback(); Thread sleep 1000 }
   }
   
   def main(args: Array[String]) {
       
       oncePerSecond(() =>
           println("每秒都打印一下.."))
   }
}

有没有发现呢?Scala真的很酷!很多好玩的!


阅读(457) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~