【发布时间】:2021-12-12 20:13:50
【问题描述】:
我不明白= 和|= 之间的区别。有人可以帮我理解这两个运算符吗?我应该什么时候使用一个而不是另一个?
【问题讨论】:
标签: operators jq assignment-operator
我不明白= 和|= 之间的区别。有人可以帮我理解这两个运算符吗?我应该什么时候使用一个而不是另一个?
【问题讨论】:
标签: operators jq assignment-operator
这些都是赋值运算符。唯一的区别是右侧操作数的输入。
= 的 RHS 接收分配的输入作为输入。|= 的 RHS 接收分配的 LHS 作为输入。LHS |= RHS 通常是 LHS = ( LHS | RHS ) 的缩写,但当左侧每个输入返回多个值时,它会有所不同。
A | B = C | D 被解析为A | ( B = C ) | D。B 接收A 的每个输出作为输入。C 接收B 的每个输入 作为输入。
分配输出A 的每个(修改后的)输出。
A | B |= C | D 被解析为A | ( B |= C ) | D。B 接收A 的每个输出作为输入。C 接收B 的每个输出 作为输入。
分配输出A 的每个(修改后的)输出。
无论是使用= 还是|=,赋值都会返回(修改后的)赋值的输入。
例如,(输入、程序、输出)
{ "x": "pqr" }
( .x | ascii_upcase ),
.x = ( .x | ascii_upcase ),
.x |= ascii_upcase
"PQR"
{ "x": "PQR" }
{ "x": "PQR" }
例如|=可以大大简化一些程序。
{ "j": [ "pqr", "stu" ] }
.j = ( .j | map( .k = ( .k | ascii_upcase ) ) ),
.j |= map( .k |= ascii_upcase ),
.j[].k |= ascii_upcase
{"j": [ { "k": "PQR" }, { "k": "STU" } ] }
{"j": [ { "k": "PQR" }, { "k": "STU" } ] }
{"j": [ { "k": "PQR" }, { "k": "STU" } ] }
例如,= 有时是更简单的选项。
{ "o": { "m": 123 } }
.o.n = .o.m,
.o |= ( .n = .m )
{ "o": { "m": 123, "n": 123 } }
{ "o": { "m": 123, "n": 123 } }
【讨论】: