scala的方法(method) 和 函数(function)

方法与函数区别:
 1. 从定义格式来看:
  	(1)方法定义需要def关键字
 	(2)函数是一个对象,继承自FunctionN,需要一个形参接收(匿名除外)
 2. 从JVM角度
 	(1)方法是类中定义的,加载到方法区
 	(2)函数是对象,加载到堆中

1.方法 method 定义

/*方法定义*/
//result_type可以省略,由scala自推断出
def method_name(param_name:param_type) [:result_type] ={
	method_body
}
//如果没参数,可以简化省去 (param_name:param_type)

/*方法调用*/
//无括号调用 用于无参数的方法
method_name

//花括号
obj.method_name{
	expr_1
	expr_2
	...
} //最后一个表达式值作为方法参数,仅用于只有一个参数的方法

//中缀
obj method_name param //多个参数要括起来
//后缀
obj.method_name(param) //和java对象方法一样

2. 函数 function 定义

val func_name [ : param_type => result_type ] = (param_name:param_type …) => function_body

val myFunc:Int=>String = (c:Int)=>"*"*c 
// val myFunc:Int=>String = (c)=>"*"*c  也可以,因为参数类型已指定

//简化模式
val myFunc2 = (c:Int)=>"*"*c //返回值参数scala可以自己判断

/*匿名函数*/
// 常用于集合中,集合元素作为参数传入
println( (1 to 10 ).map(x=>"*"*x) //配合map,会将集合的元素作为参数x传入函数中,此时参数类型也不用指定了,会由scala根据集合元素类型判断

// 使用 _ 简化
println( (1 to 10 ).map("*"*_)

3.方法转、函数转换

3.1 柯里化 Currying

spark源码大量使用柯里化,了解
将函数作为方法参数的一部分,提供更好的扩展性

def method_name(_param:_type)(func:param_type=>result_type)={
	func(_param)
}

def m( num:Int)(myFunc:Int=>Unit){
	println("执行一个柯里化方法")
	myFunc(num)
}

m(2)(println("&"*_)//参数只能用_调用,而函数在一个参数下可以_

3.2 方法转函数

//方法名后加 _ 即可将方法作为变量赋值
val a = method_name _
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值