2012-04-13 15 views
3

[String]オブジェクトの代わりに[Some]オブジェクトを取得するのはなぜですか?
Someオブジェクトは、メソッド呼び出しで文字列パラメータとして機能しません。
スカラの文字列の代わりにSomeを取得する理由

config defStringを返しますので、タイプはStringと予想されます。
しかし、 "Hello"と入力するとScala getが正しくなります。戻るには何もないときには空の値を返すことができるように

コード

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

出力

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

答えて

8

、これを試してみてください。

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

または多分好ましく:

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

あなたがRuntimeExceptionsを好きなら最初のものは良いです。.. 。 –

+0

@Luigi +1情報です。しかし、私はあなたが皮肉っていると感じている。私はRuntimeExceptionを好む...ハード、高速でスタックトレースの正しい場所ではなくむしろランダムな場所で後で。私の設定ファイルが入力ミスの場合、私はそれを知りたいと思います。 – Farmor

+2

@Farmorかなり十分ですが、実際に例外をスローしたい場合は、 'get'を使用しないでください:' getOrElse(sys.error( "Illegal config String")) 'を使用して、懸念を分離し、エラーを明確にしますあなたが実際にここで妥当性チェックをしていることをより明確にしてください。 –

7

のgetStringは、オプションの[文字列]を返します。返すものがあるときはSome(文字列)を返し、get()メソッドを使って内部の文字列を取得することができます。あなたは不必要Option[String]toString()Play.current.configuration.getString()リターン)を呼び出している

関連する問題