有沒有scala編譯器的任何規範可以解釋這種行爲?Scala編譯:匿名函數
階版本:2_10_6
代碼示例
trait Service {
def process(s: String)
}
object ServiceImpl extends Service{
override def process(s: String): Unit = {
println(s)
}
}
object Register {
var serviceInst : Service = ServiceImpl
}
object Client1 {
def process1(l: List[String]): Unit ={
l.foreach(x => Register.serviceInst.process(x))
}
}
object Client2 {
def process1(l: List[String]): Unit ={
l.foreach(Register.serviceInst.process)
}
}
我認爲過程1和過程2應該有類似的行爲。然而,comilation/DECOM後
public final class Client1$$anonfun$process$1$$anonfun$apply$1 extends AbstractFunction1<String, BoxedUnit> implements Serializable {
public static final long serialVersionUID = 0L;
public final void apply(final String x$1) {
Register$.MODULE$.serviceInst().process(x$1);
}
}
public static final class Client2$$anonfun$process$1 extends AbstractFunction1<String, BoxedUnit> implements Serializable {
public static final long serialVersionUID = 0L;
private final Service eta$0$1$1;
public final void apply(final String s) {
this.eta$0$1$1.process(s);
}
}
這些功能都不是部分功能。這些類之間的不同行爲的原因是'client2'對於'serviceInst.process'是eta擴展的,這意味着它直接在生成的函數類中使用這個方法。 – adamwy
謝謝。改變措辭。 – Rumoku