【问题标题】:Difference between `=` and `|=` in jqjq中`=`和`|=`的区别
【发布时间】:2021-12-12 20:13:50
【问题描述】:

我不明白=|= 之间的区别。有人可以帮我理解这两个运算符吗?我应该什么时候使用一个而不是另一个?

【问题讨论】:

    标签: operators jq assignment-operator


    【解决方案1】:

    这些都是赋值运算符。唯一的区别是右侧操作数的输入。

    • = 的 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" }
      

      Demo on jqplay

    • 例如|=可以大大简化一些程序。

      { "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" } ] }
      

      Demo on jqplay

    • 例如,= 有时是更简单的选项。

      { "o": { "m": 123 } }
      
      .o.n = .o.m,
      .o |= ( .n = .m )
      
      { "o": { "m": 123, "n": 123 } }
      { "o": { "m": 123, "n": 123 } }
      

      Demo on jqplay

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2011-02-17
      • 2016-10-18
      • 2012-07-03
      • 2013-10-25
      • 2011-03-01
      相关资源
      最近更新 更多