2012-01-31 11 views

Odpowiedz

17

Jeśli używasz App cechę, wtedy nie trzeba zastąpić main sposób - wystarczy napisać kod w ciele object:

object Main extends App { 
    val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r 

    println(NameTemplate) 

    val NameTemplate(name, version) = args(0) 

    println(name + " v" + version) 

} 

To działa, ponieważ App cecha rozciąga DelayedInit cechę, która ma bardzo specjalna procedura inicjalizacji. Możesz nawet uzyskać dostęp do argumentów z args, jak pokazano w przykładzie.

Trzeba jeszcze napisać main metody, jeśli nie chcesz, aby przedłużyć App, ale w tym przypadku to będzie działać zgodnie z oczekiwaniami:

object Main { 
    val NameTemplate = """^([A-Za-z]+)_(\d+)\.png""".r 

    def main(args: Array[String]) { 
     println(NameTemplate) 

     val NameTemplate(name, version) = args(0) 

     println(name + " v" + version) 
    } 

} 
6

The DelayedInit cechę (który App rozciąga) powoduje przepisanie od intialisation kod do wykonania w specjalnej metodzie delayedInit(). To byłoby zwykle wywoływane przez main. Ponieważ jednak zastępujesz kod main, kod delayedInit() nigdy nie jest wywoływany i jako taka nie jest inicjowana.

Jak wyjaśnia @tenshi, możesz obejść to, nie przedłużając App lub przenosząc swój główny kod do treści obiektu Main.