Scala是纯的面向对象吗?

15-03-31 banq
         

通过上面案例我们发现Scala并不是纯的函数语言,Scala号称是面向对象和函数语言的混合,那么Scala是纯的面向对象吗?

IS SCALA PURE OBJECT-ORIENTED PROGRAMMING LANGUAGE??一文回答了这个问题。

Scala是纯的面向对象,其函数和初始类型在Scala中也都是对象。

函数是对象

内部函数只是一个带有apply方法的trait,如下是一个名为Function1的 trait接口,其有一个apply函数(方法) :

trait Function1[A,B]{

def apply(x:A):B

}

上面这个trait接口表示它将类型A作为参数,返回类型 B,所以它是一种关于类型 Int => Int = <function1>的函数。

如果按照下面编写一个匿名函数:

val f=(x:Int)=>x*x

在Scala内部,它实际是:

val f=new Function1[Int,Int]{

def apply(x:Int)=x*x

}

当我们调用这个函数时内部其实是调用trait的apply函数方法,比如我们如此调用:

f(4)

内部它调用trait的apply函数方法,实际是如下对象方式的调用:

f.apply(4)

初始类型也是对象

内部所有原始类型都是带有操作方法的类,看看下面代码:Boolean 类型

abstract class Boolean{

def ifThenElse[T](t: =>T,e: =>T):T

def &&(x: =>Boolean):Boolean=ifThenElse(x,false)

}

内部的true 或 false其实是一个对象,覆盖了原来的方法行为。

object true extends Boolean

{

def ifThenElse[T](t: =>T,e: =>T)=t

}

object false extends Boolean

{

def ifThenElse[T](t: =>T,e: =>T)=e

}

在Scala中,每个初始类型都是一个对象,操作符是函数方法,这样,当我们编写数学公式如 3+3 时,其内部面向对象翻译为:3.+(3)

这里的“3”代表一个对象,而“+”是对象类内部的函数方法而已。

Int类的定义如下:

class Int{
def +(that:Int):Int
def -(that:Int):Int
def /(that:Int:Int
def *(that:Int):Int
def
}
<p>

[该贴被banq于2015-03-31 09:27修改过]