首页 > 学院 > 开发设计 > 正文

scala 中方法和函数的区别

2019-11-08 01:14:44
字体:
来源:转载
供稿:网友

定义

方法和函数是作为两种东西在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 = 100def m2() = 100//这两个都是方法,接受参数都是0个,第一种省略了参数列表,第二个没有val f1 = () => 100//val f2 = =>100 没有这种写法

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

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

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

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

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

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


上一篇:文章标题

下一篇:02R语言的包

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表