单纯从面向对象的角度来看待scala,可以说scala就是一门纯面向对象的编程语言,因为在scala中,一切都可以看做是对象。这点和java是不同的,java中区分基本数据类型和引用类型。
- 数字对象
5210000 + 1 *1024 / 1
在java中这就是基本的运算,但是scala中认为一切皆是对象,所以每个 数字你都可以当一个对象来处理,可以写成如下形式:
(5210000).+(((1).*(1024))./(1))
函数对象
这点也是scala函数式编程的一大亮点。函数可以作为参数来传递,也可以用变量来存储,还可以用函数来返回一个函数。object FunctionDemo extends App { def printResult(fun: (Int, Int) => Int): Unit = println(fun(4, 5)) def add(x: Int, y: Int): Int = x + y printResult(add(_: Int, _: Int)) }
代码中定义了两个函数,printResult函数,add函数。
- printResult函数的参数为接受一个函数,并返回Unit。
- add函数的参数为两个Int类型的参数,并返回Int类型。
最后一句代码函数调用,打印出求和结果。
匿名函数
在上面的例子中,add函数仅被调用过一次,这中情况下,我们可以不用单去定义,而是直接在调用出传第一个相应形式的函数即可,在scala中我们称之为匿名函数(anonymous functions,通俗解释:没有名字的函数。)
改用匿名函数后的代码如下:
object FunctionDemo extends App {
def printResult(fun: (Int, Int) => Int): Unit = println(fun(4, 5))
printResult((x, y) => x + y)
}
(x, y) => x + y
就是一个匿名函数,这里类型可以自动推断。如果单独定义一个匿名参数还是需要指定参数类型的。
如:
(x:Int,y:Int)=>x+y
=> 左侧是函数参数列表,=>右侧是函数体。