在 Scala 中函数与方法通常都表示一个意思,二者在使用上没有实质区别,一般在开发中也是可以相互替代和转换的。
<br>
在函数式编程中,函数是一等公民。函数可以作为参数值传入其他函数中,函数的返回值可以是函数,函数甚至可以嵌套函数。
<br/>
如果非要区分的话,总结的区别如下:
(1)Scala 中的方法跟 Java 的类似,方法是组成类的一部分,指代类的成员;
(2)Scala 中的函数则是一个完整的对象,其实就是继承了Trait 的类的对象,Scala中内置了了许多 Trait(Function0~Function22)分别表示不同的参数个数的函数;
(3)如果更明确划分的话,Scala 中使用 `val` 语句定义函数,`def` 语句定义方法。(但我们习惯上将 `def` 定义称为函数,`val`定义的为常量);
```scala
object HelloWorld {
def main(args: Array[String]): Unit = {
// 定义方法
def m1(x: Int, y: Int): Int = x * y
def m2(): Unit = println("无参方法")
println(m1(100, 200)) // 20000
m2() // 无参方法
m2 // 无参时可以省略 ()
// 定义函数
val m3 = (x: Int, y: Int) => { x * y }
val m4 = () => println("无参函数")
println(m3(100, 200)) // 20000
m4() // 无参方法
// m4 即使函数无参,调用时也不能省略 (),否则什么都不做,也不报错
}
}
```
通过反编译,看到的Java代码如下:
```java
...
// m3是一个Function2对象
Function2 m3 = new AbstractFunction2.mcIII.sp() { public static final long serialVersionUID = 0L;
...
};
// m4 是一个Function0对象
Function0 m4 = new HelloWorld..anonfun.2();
...
}
// m1和m2是一个方法
private final int m1$1(int x, int y)
{
return x * y; }
private final void m2$1() { Predef..MODULE$.println("无参方法"); }
}
```
- Scala是什么?
- Scala特性
- 开发环境搭建
- 环境搭建
- windows下的环境搭建
- IntelliJ IDEA环境搭建
- Scala关键字
- Hello, World
- 数据类型
- 数据类型
- 数据类型层次结构
- 字面量
- Null类型
- Nothing类型
- Unit类型
- 变量与常量
- type定义类型别名
- 字符串插值器
- 条件控制
- 循环控制
- 数组
- 元组
- 集合
- 集合分类
- List常用操作
- Set常用操作
- Map常用操作
- 函数
- 函数声明与调用
- 函数与方法的区别
- 函数注意事项
- 匿名函数
- 可变参数
- 高阶函数
- 中置表达式
- 函数嵌套
- 函数科里化
- 隐式参数
- 隐式函数
- 闭包
- 类和对象
- Java与Scala的比较
- 有关类与对象概念
- 类
- 类的定义和调用
- 类的继承
- 抽象类
- 单例对象
- 伴生对象和伴生类
- 特质
- 定义特质
- 混入特质
- 抽象类与特质的选择
- 自身类型
- 依赖注入
- this别名
- 样例类
- 枚举类
- 泛型类
- 包与包对象
- 模式匹配
- 基本语法
- 匹配模式
- 偏函数
- 注解
- 运算符
- 正则表达式
- 隐式类
- 异常处理
- 高级类型
- 结构类型
- 复合类型