0

Play Combinators を介して JSONObject インスタンスを実際のインスタンスにマップしようとしています。デシリアライズ作業を正しく行うことができます。問題は、Option[JSONObject] で map() がどのように機能するかについてです。

オプション1:

jsonVal: Option[JSONObject] = getAsJson(input)
jsonVal.map(JSONUtil.fromJsonString(_.toString(), Blah.jsonReads))

_ が正しく解決されないため、動作しません。コンパイルに失敗します。コンパイラは、オブジェクトで toString() を見つけることができませんでした。

オプション 2:

jsonVal: Option[JSONObject] = getAsJson(input)
jsonVal.map(_.toString()).map(JSONUtil.fromJsonString(_, Blah.jsonReads))

動作します!!。関数の引数の一部として変換が行われたときに、デフォルト変数の Type が伝播されない理由を誰か教えてもらえますか?

4

1 に答える 1

3

の振る舞いではなくmap、の振る舞いです_これは、通常の関数式 (この場合は)の単なるショートカットです。最初のケースでは、

jsonVal.map(JSONUtil.fromJsonString(x => x.toString(), Blah.jsonReads))

これは明らかに機能せず、フルバージョンを作成する必要があります

jsonVal.map(x => JSONUtil.fromJsonString(x.toString(), Blah.jsonReads))
于 2015-09-20T22:50:31.227 に答える