yaml中的循环定义

时间:2013-02-22 22:36:24

标签: serialization yaml

我正在尝试用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'。我知道为什么会这样 - 因为我还没有定义这条线。但我不能先定义线路,因为它们依赖于电台,但现在电台依赖于线路。

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

1 个答案:

答案 0 :(得分:1)

Congradulations!您在大多数(如果不是全部)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

这有帮助吗?