Myślę, że nie masz szczęścia, jeśli chcesz wspierać 1.8, musisz użyć =>
. Jak zwykle wspomnę, że musisz użyć =>
w niektórych przypadkach w 1.9:
- Jeśli klucz nie jest symbolem. Pamiętaj, że każdy obiekt (symbole, łańcuchy, klasy, obiekty pływające, ...) może być kluczem w Ruby Hash.
- Jeśli potrzebujesz symbolu, który cytujesz:
:'this.that'
.
- Jeśli używasz MongoDB do prawie wszystkiego, będziesz używał rzeczy takich jak
:$set => hash
, ale $set: hash
jest błędem składni.
Powrót do naszego regularnie zaplanowanego programowania.
Dlaczego mówię, że nie masz szczęścia? Składnia literacka Hasha (obie) jest mocno osadzona w parserze i nie sądzę, że będziesz miał dużo szczęścia załatania parsera ze swojego klejnotu. Ruby 1.8.7's parse.y
ma do powiedzenia:
assoc : arg_value tASSOC arg_value
{
$$ = list_append(NEW_LIST($1), $3);
}
;
i tASSOC
jest =>
tak hash literały są podłączone na stałe do korzystania =>
. 1.9.3's mówi tak:
assoc : arg_value tASSOC arg_value
{
/*%%%*/
$$ = list_append(NEW_LIST($1), $3);
/*%
$$ = dispatch2(assoc_new, $1, $3);
%*/
}
| tLABEL arg_value
{
/*%%%*/
$$ = list_append(NEW_LIST(NEW_LIT(ID2SYM($1))), $2);
/*%
$$ = dispatch2(assoc_new, $1, $2);
%*/
}
;
Mamy składnię tłuszcz strzałki ponownie (arg_value tASSOC arg_value
) oraz styl JavaScript (tLABEL arg_value
); AFAIK, tLABEL
jest również źródłem ograniczeń, jakie symbole (no :$set
, no :'this.that'
, ...) mogą być używane ze składnią w stylu JavaScript. Obecny bagażnik parse.y
dopasowuje 1.9.3 dla literałów skrótu.
Tak więc składnia literacka skrótu jest podłączona do parsera i utknąłeś w grubych strzałkach, jeśli chcesz wspierać 1.8.
Ruby 1.8 wkrótce zniknie. Nie potrzebujesz do tego wsparcia. – sawa
Czy to jest popularna opinia? Z pewnością szukam informacji na temat tego, co robią inni autorzy Gem. Wiem, że w społeczności Rubiego istnieje spora presja, aby wszyscy wsiedli do pociągu 1.9. Osobiście nie mam nic przeciwko pozostawieniu 1.8 za sobą. – JackCA