[英]overriding classes using sbt console/spark-shell
所以我最近對開發使用sbt console / spark-shell感興趣了,我對使用現有的包/ jar有疑問。 所以我知道你可以導入罐子,它可以覆蓋類,但我想知道:是否有可能覆蓋類並強制所有其他類指向該覆蓋類?
所以,如果我有
class Bar(){
def a() = { (new Foo).blah()}
}
並且我重寫Foo,有沒有辦法可以做到這一點,所以我不需要也覆蓋Bar?
讓我們用時間表解釋一下:
1. class X { def t = 1 }
2. class Y {
def x: X = new X
}
到此為止,第2行的Y類定義是指第1行中X的定義。
3. class X { def t = 2 }
現在,第2行的Y類仍然從第1行引用X.這就是REPL的工作原理。 變更是有效的,而不是倒退。
4. class Y {
def x: X = new X
}
現在,正如您所期望的那樣,第4行的新Y將引用第3行的新X.
通常,您可以通過替換類路徑中的類來實現。 如果新版本是二進制兼容的,您甚至可以重新運行而無需重新編譯。
這兩個故障是REPL編譯器是駐留的,並且該類位於特定的包中(例如, $line8
)。 您需要一個新的編譯器來使用刷新的包。
在重置編譯器時,有打開的票證可以保留或丟棄$line
包。 另一個缺失的部分是在適當的包中編譯新版本的類,或者反過來重新生成消費類。
請注意:require
命令允許您添加jar但不替換類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.