map() 在选项上的行为

Behavior of map() on Options

我正在尝试通过 Play Combinators 将 JSONObject 实例映射到实际实例。我能够使反序列化正常工作。问题在于 map() 如何处理 Option[JSONObject].

的行为

选项 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))

有效!!有人能告诉我为什么当转换作为函数参数的一部分完成时,默认变量的类型没有传播吗?

这不是 map 的行为,而是 _ 的行为。它只是普通函数表达式(in this case)的快捷方式。在第一种情况下你有

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

这明显不行,需要写完整版

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