Scala中的方法与函数

Scala 是一门函数式的编程语言,同时兼顾了面向对象语言的特性。在Scala中,函数与方法时两个不同的概念。

  • 方法与函数的定义方式不同
  • 方法可以转换为函数
  • 函数就是对象
  • 函数可以作为方法的参数
  • 函数可以作为方法的返回值

方法

声明方式

def methodName (参数名:参数类型, 参数名:参数类型) : [返回值类型] = {
      // 方法体
}

函数

声明方式

val 函数名 = (参数名:参数类型, 参数名:参数类型) => { 函数体 }
val 函数名 : (参数类型, 参数类型) => (返回值) = { 函数体 }

方法转换为函数:
在某些情况下,需要将方法作为变量传递,这时就需要将方法转换为函数

def add (i:Int, j:Int) = i + j
val functionAdd = add _
print(functionAdd(1, 4))

函数与方法的区别:

  • 方法隶属于类或者对象,在运行时,方法会加载到 jvm 的方法区中;函数是一个对象,在运行时,会被加载到 jvm 的堆内存中。
  • 函数是一个对象,继承自 FunctionN,函数对象中有 apply()、curried()、toString()、tupled()这些方法,而方法则没有。

高阶函数

使用函数值作为参数,或者返回值为函数值的 “函数” 和 “方法”,均称之为 “高阶函数”。
1、函数作为参数

val array=Array(1,2,3,4,5)
val func=(x:Int)=>x*10
array.map(func)

2、匿名函数

val array=Array(1,2,3,4,5)
array.map(x=>x*10)

其中 “x=>x10” 部分即为声明的匿名函数,完整形式为:(x:Int)=>{x10}。

3、柯里化
方法可以定义多个参数列表,当使用较少的参数调用多参数列表的方法时,会产生一个新的函数,该函数接受剩余的参数列表作为其参数,这就被称为柯里化。简单理解就是将函数值作为方法的返回值

// 返回值为 “(String, String) => String” 的函数
def method(a:String):(String,String)=>String={
    (b:String,c:String)=>a+"-"+b+"-"+c
}
// 调用后返回匿名函数 (b:String,c:String)=>"str"+"-"+b+"-"+c
method("str")

// 比较简洁的定义方式
def getAddress(a:String)(b:String,c:String):String={ 
        a+"-"+b+"-"+c 
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。