2017-02-08 4 views
7

Le YAML spec indique clairement:Pourquoi la spécification YAML impose-t-elle un espace après le deux-points?

mappings utilisent deux points et l'espace (« : ») pour marquer chaque clé: paire de valeurs.

Donc, ce qui est légal:

foo: bar 

Mais, est-ce pas:

foo:bar 

Je vois beaucoup de gens en ligne qui sont rodomontades sur l'espace. Je pense qu'ils ont un point. Je me suis brûlé plusieurs fois moi-même.

Pourquoi l'espace est-il obligatoire? Quelle était la considération de conception derrière tout cela?

Répondre

8

Il est facile de manquer, car cette spécification utilise la convention bizarre de ne mettre en évidence le dernier caractère d'un lien interne, mais le “: ” dans la section que vous citez est en fait un lien to another section of the specification qui répond à votre question:

Normalement, YAML insiste pour que l'indicateur de valeur de mappage ":" soit séparé de la valeur par un espace blanc. Un avantage de cette restriction est que le caractère ":" peut être utilisé à l'intérieur de scalaires simples, tant qu'il n'est pas suivi d'espace blanc. Cela permet des URL et des horodatages sans guillemets. C'est aussi une source potentielle de confusion car "a: 1" est une scalaire simple et non une clé: une paire de valeurs.

Donc, la motivation est que vous pouvez écrire des listes comme celle-ci sans nécessiter de citer:

useful_values: 
- 2:30 
- http://example.com 
- localhost:8080 

Si l'espace était en option, ce qui pourrait finir par être ambigu, et interprété comme un ensemble de clé paires de valeurs.

A côté: Voici un extrait de JS pour rendre la mise en forme des liens sur ce document moins inutile.

document.styleSheets[0].insertRule('a[href^="#"] { color: #00A !important; text-decoration: underline !important; background: none !important; }', 0); 
+0

Wow! Ils sont très très sournois. Merci. – Vitaliy