在子类中烫伤覆盖args

时间:2014-09-26 07:10:30

标签: scala inheritance arguments scalding

我有两个Scalding作业,其中一个继承自另一个。像这样的东西

class BaseJob(args : Args) extends Job(args) {
   val verbose = args.boolean("verbose")

   if(verbose){
     // do stuff
   }else{
     // do other stuff
   }
}

class MyJob(args : Args) extends BaseJob(args) {
  override val verbose = true

  override def formatOutput(p: Pipe): Pipe = {
    println(verbose) // outputs false if not run with --verbose
    p.project('field1, 'field2, 'field3)
  }
}

我的想法是,MyJob中的某些代码假设我们使用详细标志运行,因此我不想将其作为参数,而是要确保始终设置此参数。但是,简单地覆盖类变量不起作用,因为它仍将采用“详细”的值。从命令行参数。有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:1)

可以通过额外的“延伸”来完成。这样继承确实可以正常工作。

class MyJob(args : Args) extends { override val verbose = true } with BaseJob(args) {

  override def formatOutput(p: Pipe): Pipe = {
    println(verbose) // outputs false if not run with --verbose
    p.project('field1, 'field2, 'field3)
  }
}