Tôi nghĩ bạn đã hết may mắn, nếu bạn muốn hỗ trợ 1.8 thì bạn phải sử dụng =>
. Như thường lệ, tôi sẽ đề cập rằng bạn phải sử dụng =>
trong một số trường hợp nhất định trong 1,9:
- Nếu khóa không phải là biểu tượng. Hãy nhớ rằng bất kỳ đối tượng nào (biểu tượng, chuỗi, lớp, float, ...) đều có thể là một khóa trong Ruby Hash.
- Nếu bạn cần một biểu tượng bạn muốn báo giá:
:'this.that'
.
- Nếu bạn sử dụng MongoDB cho khá nhiều thứ bạn sẽ sử dụng những thứ như
:$set => hash
nhưng $set: hash
là lỗi cú pháp.
Quay lại chương trình được lập lịch thường xuyên của chúng tôi.
Tại sao tôi lại nói rằng bạn không may mắn? Cú pháp Hashalal (cả hai) đều có dây cứng trong trình phân tích cú pháp và tôi không nghĩ rằng bạn sẽ có nhiều may mắn khi vá phân tích cú pháp từ đá quý của bạn. Ruby 1.8.7's parse.y
có này để nói:
assoc : arg_value tASSOC arg_value
{
$$ = list_append(NEW_LIST($1), $3);
}
;
và tASSOC
là =>
literals nên băm là cứng có dây để sử dụng =>
. 1.9.3's nói điều này:
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);
%*/
}
;
Chúng ta có cú pháp mỡ mũi tên một lần nữa (arg_value tASSOC arg_value
) và phong cách hoạt Javascript (tLABEL arg_value
); AFAIK, tLABEL
cũng là nguồn gốc của các hạn chế về loại biểu tượng nào (không có :$set
, không :'this.that'
, ...) có thể được sử dụng với cú pháp kiểu JavaScript. Các thân cây hiện tại parse.y
phù hợp với 1.9.3 cho Hash literals.
Vì vậy cú pháp chữ băm được nối cứng vào trình phân tích cú pháp và bạn bị mắc kẹt với mũi tên chất béo nếu bạn muốn hỗ trợ 1.8.
Nguồn
2012-03-14 01:22:25
Ruby 1.8 sẽ sớm biến mất. Bạn không cần hỗ trợ cho nó. – sawa
Đó có phải là một ý kiến phổ biến? Tôi chắc chắn đang tìm kiếm đầu vào về những gì các tác giả Gem khác đang làm. Tôi biết có một sự thúc đẩy lớn trong cộng đồng Ruby để có được tất cả mọi người trên tàu 1.9. Cá nhân tôi không phiền khi bỏ 1.8 sau. – JackCA