Поведение карты () на Опции

Я пытаюсь отобразить экземпляр JSONObject в фактический экземпляр с помощью Play Combinators. Я могу правильно выполнить работу по десериализации. Вопрос в том, как map() работает с опцией [JSONObject].

Опция 1:

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

Не работает, не компилируется, так как _ не разрешен правильно. Компилятор не может найти toString() для объекта.

Option2:

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

Работает!!. Может кто-нибудь сказать мне, почему тип переменной по умолчанию не распространяется, когда преобразование выполняется как часть аргумента функции?

1 ответ

Решение

Это не поведение mapПоведение _, Это просто ярлык для нормального выражения функции ( в данном случае). В первом случае у вас есть

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

который, очевидно, не работает, и нужно написать полную версию

jsonVal.map(x => JSONUtil.fromJsonString(x.toString(), Blah.jsonReads))
Другие вопросы по тегам