Creo que estás de suerte, si quieres soportar 1.8 entonces tienes que usar =>
. Como de costumbre, mencionaré que debe usar =>
en ciertos casos en 1.9:
- Si la clave no es un símbolo. Recuerde que cualquier objeto (símbolos, cadenas, clases, flotadores, ...) puede ser una clave en un Ruby Hash.
- Si necesita un símbolo que citaría:
:'this.that'
.
- Si usa MongoDB para prácticamente cualquier cosa, estará utilizando cosas como
:$set => hash
pero $set: hash
es un error de sintaxis.
Regrese a nuestra programación programada regularmente.
¿Por qué digo que no tiene suerte? Las sintaxis literales Hash (las dos) están cableadas en el analizador y no creo que vayas a tener mucha suerte parcheando el analizador de tu gema. Ruby 1.8.7's parse.y
tiene esto que decir:
assoc : arg_value tASSOC arg_value
{
$$ = list_append(NEW_LIST($1), $3);
}
;
y tASSOC
es =>
literales de modo de patata son cableados a utilizar =>
. 1.9.3's dice esto:
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);
%*/
}
;
Tenemos la sintaxis de grasa de flecha de nuevo (arg_value tASSOC arg_value
) y el estilo de JavaScript (tLABEL arg_value
); AFAIK, tLABEL
es también la fuente de las restricciones sobre qué tipo de símbolos (no :$set
, no :'this.that'
, ...) se pueden utilizar con la sintaxis de estilo de JavaScript. El tronco actual parse.y
coincide con 1.9.3 para los literales Hash.
Por lo tanto, la sintaxis literal de Hash está integrada en el analizador sintáctico y está bloqueado con flechas gordas si desea admitir 1.8.
Ruby 1.8 se desvanecerá pronto. No necesitas apoyo para eso. – sawa
¿Es esa una opinión popular? Ciertamente estoy buscando aportes sobre lo que otros autores de gemas están haciendo. Sé que hay un gran impulso dentro de la comunidad de Ruby para que todos entren en el tren 1.9. Personalmente no me importa dejar atrás 1.8. – JackCA