2013-10-01 16 views
193

Próbuję napisać słownik YAML dla internacjonalizacji projektu Rails. Jestem trochę zdezorientowany, ponieważ w niektórych plikach widzę ciągi w podwójnych cytatach, aw niektórych bez. Kilka punktów do rozważenia:Czy potrzebuję wycen na struny w Yaml?

  • example 1 - wszystkie łańcuchy używają podwójnych cudzysłowów;
  • example 2 - brak ciągów (z wyjątkiem dwóch ostatnich) użyj cudzysłowów;
  • the YAML cookbook mówi: Załączenie ciągów znaków w cudzysłowach pozwala używać escapings do reprezentowania znaków ASCII i Unicode. Czy to oznacza, że ​​muszę używać podwójnych cudzysłowów tylko wtedy, gdy chcę uciec przed niektórymi postaciami? Jeśli tak - dlaczego używają podwójnych cytatów wszędzie w pierwszym przykładzie - tylko ze względu na jedność/stylistyczne powody?
  • ostatnie dwie linie przykładu 2 używają ! - nieswoistego znacznika, podczas gdy ostatnie dwa wiersze pierwszego przykładu nie - i oba działają.

Moje pytanie brzmi - jakie są zasady korzystania z różnych typów ofert w YAML. Czy można powiedzieć, że:

  • w ogóle, nie potrzebujesz wycen;
  • jeśli chcesz uniknąć znaków, użyj podwójnych cudzysłowów;
  • używać ! z pojedynczymi cytatami, gdy ...?!?

Dziękuję.

+0

Drugi link nie jest już pracuję, proponuję umieścić swoje przykłady w pytaniu. – heroin

Odpowiedz

283

Po krótkim przeglądzie książki kucharskiej YAML przywołane w pytaniu, a niektóre badania, oto moja interpretacja:

  • Na ogół nie trzeba cytaty.
  • Używaj cudzysłowów, aby wymusić ciąg znaków, np. jeśli kluczem lub wartością jest 10, ale chcesz, aby zwrócił ciąg, a nie Fixnum, napisz '10' lub "10".
  • Stosować cytaty, jeśli wartość ta zawiera znaki specjalne (np :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \).
  • Pojedyncze cudzysłowy pozwalają umieścić prawie dowolny znak w łańcuchu i nie będą próbować analizować kodów ucieczki. '\n' zostanie zwrócony jako ciąg \n.
  • Podwójne wycinki przetwarzają kody ucieczki. "\n" zostanie zwrócony jako znak posuwu w linii.
  • Znak wykrzyknika wprowadza metodę, np. !ruby/sym, aby zwrócić symbol Ruby.

Wydaje mi się, że najlepiej byłoby nie używać cudzysłowu, chyba że musisz, a następnie używać pojedynczych cudzysłowów, chyba że chcesz przetwarzać kody ucieczki.

Aktualizacja

„Tak” i „Nie” powinny być ujęte w cudzysłów (pojedyncze lub podwójne), albo będą interpretowane jako TrueClass i FalseClass wartości:

en: 
    yesno: 
    'yes': 'Yes' 
    'no': 'No' 
+7

To nie jest pełny obraz. Na przykład '@' i \ 'mogą być używane gdziekolwiek w zwykłym łańcuchu, z wyjątkiem na początku, ponieważ są to [zarezerwowane wskaźniki] (http://yaml.org/spec/1.2/spec.html#id2774228). –

+12

Nie próbowałem dostarczyć pełnego obrazu, tylko niektóre zasady. Tak, wygląda na to, że czasami niektóre znaki specjalne (zarezerwowane wskaźniki) mogą być używane bez cudzysłowów (o ile wskaźnik zarezerwowany nie uruchamia zwykłego skalaru), ale nie jest źle używać cudzysłowów za każdym razem, gdy zobaczysz znak specjalny. –

+2

Kilka dodatkowych informacji: możesz uruchomić skalar z '%', jeśli twój dokument zawiera dyrektywną linię końcową ('---') w yaml 1.2 – peterjwest