1

我正在尝试使用 yaml 来表示包含车站和线路的火车网络;一个最小的工作示例可能是 3 个站点,线性连接,所以A<->B<->C. 我代表三个站如下:

---
stations:
    - A
    - B
    - C

现在我想在网络上存储不同的线路,以及它们的开始/结束位置。为此,我添加了一个行数组和一些锚点,如下所示:

---
stations:
    - &S-A A
    - &S-B B
    - &S-C C
lines:
    - &L-A2C A to C:
        from: *S-A
        to: *S-C
    - &L-C2A C to A:
        from: *S-C
        to: *S-A

这是我遇到麻烦的部分:我想在每个车站存储每条线路的下一站。理想情况下是这样的:

---
stations:
    - &S-A A:
        next:
            - *L-A2C: *S-B
    - &S-B B:
        next:
            - *L-A2C: *S-C
            - *L-C2A: *S-A
    - &S-C C:
        next:
           - *L-C2A: *S-B

lines数组保持不变)

但这失败了——至少在 Python yaml 库中,说yaml.composer.ComposerError: found undefined alias 'L-A2C'. 我知道为什么会这样——因为我还没有定义这条线。但是我不能先定义线路,因为它们取决于车站,但现在车站取决于线路。

有没有更好的方法来实现这一点?

4

1 回答 1

1

恭喜!您在大多数(如果不是全部)YAML 实现中发现了一个问题。我最近也发现了这个限制,我正在研究如何解决(在 Ruby 世界中)。但这对你没有帮助。您将要做的是将“下一站”存储为一组单独的数据点。

next-stops:
  *S-A:
    - *L-A2C: *S-B
  *S-B:
    - *L-A2C: *S-C
    - *L-C2A: *S-A
  *S-C:
    - *L-C2A: *S-B

这有帮助吗?

于 2013-02-23T22:43:34.380 回答