3

在解析使用两个空格缩进创建的 YAML(使用 Ruby 2.5/Psych)时,我看到了奇怪的行为。同一个文件,每行缩进四个空格 - 在我看来 - 正如预期的那样。

两个空格:

windows:
  - shell:
    panes:
      - echo hello

产生以下哈希:

{"windows"=>[{"shell"=>nil, "panes"=>["echo hello"]}]}

而使用四个空格缩进:

windows:
    - shell:
        panes:
            - echo hello

结果是:

{"windows"=>[{"shell"=>{"panes"=>["echo hello"]}}]}

我只是浏览了规范,没有看到与此问题相关的任何内容。

这种行为是预期的吗?如果是这样,我将非常感谢解释原因的资源链接。

4

2 回答 2

9
于 2018-05-30T08:47:34.960 回答
2

问题是您不能简单地将每两个空格替换为四个空格。那是因为在这对行中:

  - shell:
    panes:

第二行中的这两个空格:

    panes:
  ^^

是上面一行中“-”的缩写。如果第二行没有缩写,那么这对行将是:

  - shell:
  - panes:

因此,当缩进加倍时,这些行的第二个应该只将其第一对空格加倍,而不是第二个。这将为该对产生正确的缩进:

    - shell:
      panes:

所以,如果你只扩展“panes:”行中的第一对空格,你会得到:

windows:
    - shell:
      panes:
          - git status

哪个正确解析为预期结果。

于 2018-05-30T00:53:17.280 回答