[英]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.