Đây là mã ví dụ từ sách. Tôi cho rằng nó dành cho Ruby 1.8.Trường hợp biểu hiện khác nhau trong Ruby 1.9?
birthyear = 1986
generation = case birthyear
when 1946...1963: "Baby boomer"
when 1964...1976: "Generation X"
when 1977...2012: "new generation"
else nil
end
puts generation
Tôi chạy nó trên Ruby 1,9, và nhận được thông báo lỗi này:
Untitled 2.rb:12: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n'
when 1946...1963: "Baby boomer"
^
Untitled 2.rb:13: syntax error, unexpected keyword_when, expecting $end
when 1964...1976: "Generation X"
Làm thế nào tôi nên thay đổi này?
cảm ơn @tadman, tôi hiểu rồi. –
"Có một thay đổi trong cú pháp giữa 1.8.x và 1.9.x trong đó: bây giờ không còn được phép" - ':' là * không bao giờ * được phép. Đó là * không bao giờ * một phần cú pháp chính thức của Ruby. Đó là * không bao giờ * được ghi lại. Nó đã được thêm vào bộ phân tích cú pháp của MRI vì những lý do chưa biết và nó bị bỏ lại vì sợ rằng một sự thay đổi đối với trình phân tích cú pháp có thể làm hỏng thứ gì đó, nhưng Matz đã * luôn * làm cho nó * rất rõ ràng ':' trong 'case' và' if' các biểu thức là * không * một phần của cú pháp, rằng nó * không được * sử dụng và nó * sẽ * được loại bỏ khỏi trình phân tích cú pháp MRI trong tương lai, mà Koichi Sasada cuối cùng đã làm trong YARV. –
Tôi bắt đầu sử dụng chúng trong phiên bản 1.8.x khá tôn giáo vì chúng dường như là "tiêu chuẩn", ngay cả khi de-facto thay vì chính thức. Đó là một sự thức tỉnh thô lỗ khi 1.9.x kéo hỗ trợ.Ít nhất tôi đã có thể thực hiện một Ruby regexp để sửa mã bị hỏng vào lúc đó. – tadman