- 1. 函数&方法
- 2. 函数&方法的实现原理
1. 函数&方法
scala中方法是类的一部分,而函数是一个对象,可以赋值给一个变量。scala 中的方法跟 Java 类似,方法是组成类的一部分。scala 中的函数则是一个完整的对象。类中的方法可以重载和重写,而函数没有重载和重写的概念,但是函数可嵌套使用
2. 函数&方法的实现原理
把上诉scala代码(main函数内部的嵌套函数test()、T10类的方法test())编译为java
public final class T10$ {
public static T10$ MODULE$;
static {
new T10$();
}
public void main(final String[] args) {
Function1 function = test$1(10);
int i = function.apply$mcII$sp(20);
this.test(5);
.MODULE$.println(BoxesRunTime.boxToInteger(i));
}
public void test(final int i) {
.MODULE$.println("test方法");
}
private static final int inner$1(final int j, final int i$1) {
return i$1 + j;
}
private static final Function1 test$1(final int i) {
return (j) -> {
return inner$1(j, i);
};
}
private T10$() {
MODULE$ = this;
}
// $FF: synthetic method
private static Object $deserializeLambda$(SerializedLambda var0) {
return var0.lambdaDeserialize(var0);
}
}
//decompiled from T10.class
package com.cz.part5;
import scala.reflect.ScalaSignature;
@ScalaSignature(
bytes = "u0006u0001U:Q!u0002u0004tu000251Qau0004u0004tu0002AAQaFu0001u0005u0002aAQ!Gu0001u0005u0002iAQALu0001u0005u0002=n1u0001Vu00191u0015t9u0001"Au0003qCJ$XGu0003u0002nu0015u0005u00111Mu001fu0006u0002u0017u0005u00191m\7u0004u0001Au0011a"Au0007u0002rtu0019A+ru0019u0014u0005u0005tu0002Cu0001nu0016u001bu0005u0019""u0001u000bu0002u000bMu001cu0017r\1nu0005Yu0019"AB!osJ+g-u0001u0004=S:LGOu0010u000bu0002u001bu0005!Q.Y5o)tYbu0004u0005u0002u00139%u0011Qdu0005u0002u0005+:LGu000fCu0003 u0007u0001u0007u0001%u0001u0003beu001eu001cbcu0001n"G%u0011!eu0005u0002u0006u0003Ju0014u0018-u001ftu0003I-r!!Ju0015u0011u0005u0019u001aR"Au0014u000bu0005!bu0011Au0002u001fs_>$h(u0003u0002+'u00051u0001K]3eKu001aL!u0001Lu0017u0003rM#(/u001b8hu0015tQ3#u0001u0003uKN$HCAu000e1u0011u0015tDu00011u00013u0003u0005Iu0007Cu0001n4u0013t!4CAu0002J]Ru0004"
)
public final class T10 {
public static void test(final int i) {
T10$.MODULE$.test(var0);
}
public static void main(final String[] args) {
T10$.MODULE$.main(var0);
}
}
可得到如下结论:
(1)所谓的函数,就是在对象中生成私有的静态的final方法,并自动增加后缀
(2)所谓的嵌套函数,实际上是2个独立的方法互相调用
(3)所谓的方法,就是类中方法,无需进行任何改变



