2014-09-26 3 views
0

У меня есть два задания Скальдинга, где один наследуется от другого. Что-то вроде этогоОтверстие для переопределения аргументов в подклассе

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 предположит, что мы бежим с многословным флагом, поэтому вместо того, чтобы этот параметр, я хочу, чтобы убедиться, что это всегда имеет значение. Однако просто переопределение переменной класса не работает, так как оно все равно примет значение «verbose» из параметра командной строки. Кто-нибудь знает, как это можно сделать?

ответ

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) 
    } 
} 
Смежные вопросы