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))
我正在尝试通过 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))