1

yaml を使用して、駅と路線のある列車ネットワークを表現しようとしています。最小の動作例は、直線的に接続された 3 つのステーションである可能性があるため、A<->B<->C. 私は次のように 3 つの駅を表します。

---
stations:
    - A
    - B
    - C

ここで、ネットワーク上のさまざまな回線と、それらの開始/終了場所を保存したいと考えています。これを行うには、次のように、lines 配列といくつかのアンカーを追加します。

---
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 に答える