2017-11-22 10 views
0

Ich habe folgendes Scala 2.12.x Code:Scala App args kann nicht sein val

object Myapp extends App { 
    val bootstrapper = new Bootstrapper() 
    val config = bootstrapper.bootstrap(args) 
} 

class Bootstrapper { 
    def bootstrap(val args : Array[String]) : Config = { 
    null 
    } 
} 

Die oben führt zu einem Compiler-Fehler in meinem Bootstrapper Klasse, beschwerte sich über args eine val sein:

identifier expected but 'val' found. 

Wenn ich val args : Array[String] zu nur args : Array[String] ändere, verschwindet der Compiler-Fehler. Warum?

+1

Ihr Beispiel sollte nicht kompilieren, auch wenn Sie val entfernen. weil der Methodenname "Bootstrap" kein Konstruktor ist. Sie müssen es umbenennen in "apply" –

+0

Ahhh! Sorry @BogdanVakulenko (+1) es war nur ein Kopieren und Einfügen Fehler, bitte sehen Sie meine Updates. – smeeb

Antwort

4

In Scala Methode Parameter sind immer Vals, im Gegensatz zu Java, wo Sie sie explizit als final markieren müssen. Deshalb ist das Markieren eines Methodenparameters wie val kein Teil der Syntax.

+0

Danke @ Jasper-M (+1), ist es möglich, Methodenparameter als 'var' zu markieren? – smeeb

+1

@smeeb Es ist nicht möglich. Es ist auch nicht sehr gut, einem Methodenparameter einen neuen Wert zuzuweisen, und Scala lässt es einfach nicht zu. –

+0

Selbst wenn es möglich wäre, sie als 'var' zuzuweisen, hätte sich nichts geändert, da Java und Scala beide nach Variablen sortiert sind. –