scala 中方法和函数的区别

定义

方法和函数是作为两种东西在scala中存在的,在大多数时候他们差不太多,但是时不时的可能会有一些问题体现出他们各自不一样的情况。

函数类型:形式为(T1,…, Tn) => U,其实是FunctionN trait的简写形式,匿名函数和方法值具有这种类型(其实可以作为方法类型的一部分)
方法类型:一个非值类型(non-value type),里边是没有值的,一个方法值具有函数类型,用def定义。

方法

方法在scala中和java中一样,是一个类的一个部分

函数

函数在scala中是一个完整的对象,是一系列trait(FunctionN)的实现,由于scala “apply”的特殊语法,也就是说obj.apply()可以用obj()的方式进行调用,所以函数可以直接用后跟括号的方式进行调用

区别的一部分细节

1.方法不能作为单独的存在,除非参数为空,函数可以

def m(x: Int) = 2 * x

这是一个方法,因为不能单独存在,所以不能直接调用

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

这是一个函数,就可以单独进行调用,因为f其实是一个trait的实现(FunctionN),相当于f.apply()

2.方法可以没有参数列表,函数必须有,也就是参数列表方法可省略,函数不可省略

def m1 = 100
def m2() = 100
//这两个都是方法,接受参数都是0个,第一种省略了参数列表,第二个没有
val f1 = () => 100
//val f2 = =>100 没有这种写法

3.函数名后必须加括号才代表函数调用,否则为该函数本身,而方法名后不加括号为方法调用

4.方法可以进行eta展开,即自动转换为函数

5.方法不是值,函数是值,所以方法不能绑定给一个val变量,函数可以

6.方法有重载情况时,如果自动将方法转换为函数,需要指定参数和返回值类型

7.方法可以使用参数序列,转换称函数使用Seq对象

8.方法支持默认参数值,函数不能省略参数,不支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值