Như một số huấn luyện viên bóng đá/nhà triết học-vua có thể nói, đó là những gì nó được. Đây là số parse.y của Ruby. Của đặc biệt quan tâm là this part:
opt_rescue : keyword_rescue exc_list exc_var then
compstmt
opt_rescue
...
| none
;
exc_list : arg_value
...
| mrhs
...
| none
;
exc_var : tASSOC lhs
...
| none
;
Giải thích
exc_list
về cơ bản cho phép gì cả, một loại ngoại lệ, hoặc một (splatted) loạt các trường hợp ngoại lệ như rescue ZeroDivisionError, LoadError
exc_var
có thể không có gì hay => some_variable
Do đó,
opt_rescue
có thể là rescue
hoặc cộng một hoặc cả hai bên trên.
Đó là chỉ được liệt kê ở đây là cú pháp đặc biệt để gán cho trường hợp ngoại lệ. Việc sử dụng duy nhất khác cho =>
là dành cho key-value association.
Cũng lưu ý rằng arg_value
và mrhs
nằm ở bên trái và lhs
ở bên phải, theo như tôi có thể nói nơi duy nhất xảy ra điều này. Có người sửa tôi nếu tôi sai ở đây, nhưng không có bất kỳ việc chuyển nhượng "ngược lại" nào khác trong parse.y.
Bạn có nghĩa là 'rescue => e' không? 'raise => e' không phải là Ruby hợp lệ. –
Xin lỗi. 'rescue => e' – steveyang
Không, nó là một cấu trúc cú pháp. Xem http://stackoverflow.com/questions/9669128/ruby-rescue-like-syntax#comment12281753_9669128, tôi tự hỏi tại sao điều này lại bị hỏi một cách đột ngột. –