如果我使用關鍵字或使用定義given背景關系引數的值,是否有區別?withnew
例如human和cat givens 之間有區別嗎?
trait Talker:
def talk:String
given human:Talker with
def talk:String = "I am human"
given cat:Talker = new:
def talk:String = "I am cat, meow"
def run(using t:Talker):Unit =
println(t.talk)
uj5u.com熱心網友回復:
new使用vs時,編譯的類級別存在明顯差異with。
使用時with,會創建一個專門的類,我們可以在反編譯的代碼中看到。這是它在 Java 中的樣子
public final class Talker$package {
public static final class human$ implements Talker, Serializable {
public static final Talker$package.human$ MODULE$ = new Talker$package.human$();
private Object writeReplace() {
return new ModuleSerializationProxy(Talker$package.human$.class);
}
public String talk() {
return "I am human";
}
}
}
它有一個human$擴展的專用類Talker。
另一方面,當使用newfor時cat,我們有一個匿名類。
public final class Talker$package {
public static Talker cat() {
return Talker$package$.MODULE$.cat();
}
}
MODULE$.cat()最終指向跟隨的地方
Talker var5 = new Talker() {
public String talk() {
return "I am cat, meow";
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/455952.html
下一篇:ScalaJson決議
