企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
在 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("无参方法"); } } ```