2012-04-13 11 views
3

Warum bekomme ich ein [Some] -Objekt statt eines [String] -Objekts?
Das Some-Objekt funktioniert nicht als String-Parameter in einem Methodenaufruf.
Warum erhalte ich in Scala ein Some anstelle eines Strings

Die config def gibt eine String zurück, so erwarte ich den Typ String.
Aber wenn ich "Hallo" Scala schreibe, ist es richtig.

-Code

def config(s: String) = Play.current.configuration.getString(s).toString() 
    Logger.info(config("recaptcha.publicKey")) 
    Logger.info("Hello") 

Ausgabe

[info] application - Some(6LeDMdASAAAAAC4CFIDY-5M7NEZ_WnO0NO9CSdtj) 
[info] application - Hello 

Antwort

8

Sie sind unnötig toString() auf Option[String] (die Play.current.configuration.getString() Returns) aufrufen, versuchen Sie dies:

def config(s: String) = Play.current.configuration.getString(s).get 

oder vielleicht bevorzugt:

Play.current.configuration.getString(s).getOrElse("some default") 
+3

Die erste ist gut, wenn man gerne .. Runtime . –

+0

@ Luigi +1 für die Info. Aber ich habe das Gefühl, dass du sarkastisch bist. Ich bevorzuge eine RuntimeException ... fail hart, schnell und an der richtigen Stelle in der Stack-Trace statt später an einem zufälligen Ort. Wenn meine Konfigurationsdatei falsch eingegeben wurde, möchte ich sie pronto mit einem Knall wissen. – Farmor

+2

@Farmor fair genug, aber wenn Sie wirklich wollen, dass es eine Ausnahme werfen, sollten Sie immer noch nicht verwenden 'get': use' getOrElse (sys.error ("Illegal config String")) ', um Bedenken zu trennen, den Fehler zu klären Nachricht, und machen Sie es deutlicher, dass Sie hier tatsächlich eine Gültigkeitsprüfung durchführen. –

7

getString gibt eine Option [Zeichenfolge], so dass es einen leeren Wert zurückgeben kann, wenn es nichts zurückzukehren. Wenn etwas zurückgegeben werden soll, gibt es Some (string) zurück und Sie können die innere Zeichenfolge mit der Methode get() abrufen.

Verwandte Themen