Próbuję napisać słownik YAML do internacjonalizacji projektu Rails. Jestem jednak trochę zdezorientowany, ponieważ w niektórych plikach widzę ciągi znaków w cudzysłowach, a niektóre nie. Kilka punktów do rozważenia:
- przykład 1 - wszystkie ciągi znaków używają podwójnych cudzysłowów;
- przykład 2 - bez ciągów (oprócz dwóch ostatnich) użyj cudzysłowów;
- Cookbook YAML mówi: Zamknięcie napisów w cudzysłowach pozwala na użycie escapings do reprezentowania ASCII i Unicode znaki. 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 cudzysłowów wszędzie w pierwszym przykładzie - tylko ze względu na jedność / powody stylistyczne?
- dwie ostatnie linie przykładu 2 używają
!
- niespecyficzny znacznik, podczas gdy dwie ostatnie linie pierwszego przykładu nie - i oba działają.
Moje pytanie brzmi: jakie są zasady korzystania z różnych rodzajów cytatów w YAML?
Czy można powiedzieć, że:
- ogólnie nie potrzebujesz cytatów;
- jeśli chcesz uciec od znaków, użyj podwójnych cudzysłowów;
- użyj
!
z pojedynczymi cudzysłowami, kiedy ...?!?
Odpowiedzi:
Po krótkiej recenzji książki kucharskiej YAML cytowanej w pytaniu i kilku testach, oto moja interpretacja:
10
ale chcesz, aby zwracał ciąg, a nie Fixnum, zapis'10'
lub"10"
.:
,{
,}
,[
,]
,,
,&
,*
,#
,?
,|
,-
,<
,>
,=
,!
,%
,@
,\
).'\n'
zostanie zwrócony jako ciąg\n
."\n"
zostanie zwrócony jako znak przesunięcia wiersza.!ruby/sym
Aby zwrócić symbol Ruby.Wydaje mi się, że najlepszym rozwiązaniem byłoby nie używać cudzysłowów, chyba że musisz, a następnie używać pojedynczych cudzysłowów, chyba że chcesz przetwarzać kody specjalne.
Aktualizacja
„Tak” i „Nie” powinny być ujęte w cudzysłowy (pojedyncze lub podwójne), w przeciwnym razie będą interpretowane jako wartości TrueClass i FalseClass:
źródło
@
i `może być użyte w dowolnym miejscu w zwykłym ciągu znaków, z wyjątkiem początkowych, ponieważ są to zastrzeżone wskaźniki .Miałem ten problem podczas pracy z aplikacją Rails z Dockerem .
Moim najbardziej preferowanym podejściem jest generalnie nie używanie cudzysłowów. Obejmuje to niestosowanie cudzysłowów dla:
${RAILS_ENV}
postgres-log:/var/log/postgresql
Używam jednak podwójnych cudzysłowów dla
integer
wartości, które należy przekonwertować na ciągi znaków, takie jak:version: "3.8"
"8080:8080"
Jednak w szczególnych przypadkach podoba
booleans
,floats
,integers
, i inne przypadki, w których przy użyciu podwójnych cudzysłowów dla wartości wejściowych może być interpretowany jakostrings
, proszę nie używać podwójnych cudzysłowów.Oto przykładowy
docker-compose.yml
plik wyjaśniający tę koncepcję:To wszystko.
mam nadzieję, że to pomoże
źródło