Scala代码中`(...)(...)`语法的含义是什么?
关于Scala代码中
(...)(...)语法的解释 这段代码里的(...)(...)是Scala里函数/可调用对象的链式调用写法——本质是先计算第一个括号内的表达式,得到一个函数(或带有apply方法的实例),再用第二个括号给这个函数传递参数完成调用。
结合你给出的Play JSON代码具体拆解:
第一个括号内的代码:
(JsPath \ "lat").read[Double](min(-90.0) keepAnd max(90.0)) and (JsPath \ "long").read[Double](min(-180.0) keepAnd max(180.0))这是通过Play JSON的API,把两个针对单个JSON字段的
Reads(分别校验纬度范围[-90,90]、经度范围[-180,180])组合成一个Reads[(Double, Double)]——它能从JSON中解析出包含经纬度的二元组,同时完成范围校验。这个组合后的
Reads[(Double, Double)]实例(实际类型为FunctionalBuilder[Reads]#CanBuild2)可以被当作函数调用,它接受一个(Double, Double) => Location类型的函数参数。你传入的Location.apply _是把Location的构造方法转换成了该类型的函数——它能把解析出的经纬度二元组转换成Location对象。整个调用完成后,最终得到
Reads[Location]类型的实例,也就是可以直接从JSON解析出Location对象的读取器,且自带经纬度的范围校验逻辑。
简单来说,这种写法是Play JSON中先构造元组读取器,再传入构造函数将元组转换为目标对象的标准组合方式。
内容的提问来源于stack exchange,提问作者Duc Le
相关产品推荐
相关产品推荐

