0
LINQ风格查询斯卡拉与json4s
如下所示:如何“脱糖”这个Scala语句?
val jvalue = parse(text) // (1) val jobject = for(JObject(o) <- jvalue) yield o // (2)
我完全不知道如何(2)工作。你将如何脱糖for
-陈述?
LINQ风格查询斯卡拉与json4s
如下所示:如何“脱糖”这个Scala语句?
val jvalue = parse(text) // (1) val jobject = for(JObject(o) <- jvalue) yield o // (2)
我完全不知道如何(2)工作。你将如何脱糖for
-陈述?
换推导形式的
for(v <- generator) yield expr
被翻译成
generator.map(v => expr)
当你在左边的模式匹配,那么不匹配模式中的任何输入值将被过滤掉。这意味着创建包含匹配的部分函数,并且可以使用例如isDefinedAt
来测试每个输入参数。
val f: PartialFunction[JValue, JObject] = { case [email protected](_) => o }
f.isDefinedAt(JObject(List[JField]())) //true
f.isDefinedAt(JNull) //false
这意味着你的榜样将被翻译成类似:
PartialFunction[JValue, List[JField]] mfun = { case JObject(o) -> o }
var jobject = jvalue.filter(mfun.isDefinedAt(_)).map(mfun)
要知道,在JValue过滤器横切整个JSON树。所以你不仅仅匹配'jvalue',而且还要匹配下面的所有节点。换句话说,它在JSON树上进行搜索。 –