Xin lỗi cho tiêu đề, tôi không biết cú pháp này được gọi như thế nào.Tại sao mã này không được biên dịch trên ruby 1.9 nhưng là trên ruby 1.8?
Ví dụ:
ary = [ [11, [1]], [22, [2, 2]], [33, [3, 3, 3]] ]
# want to get [ [11, 1], [22, 2], [33, 3] ]
của Ruby 1,8
ary.map{|x, (y,)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]
ary.map{|x, (y)| [x, y] }
#Syntax error, unexpected '|', expecting tCOLON2 or '[' or '.'
#ary.map{|x, (y)| [x, y] }
# ^
của Ruby 1,9
ary.map{|x, (y,)| [x, y] }
#SyntaxError: (irb):95: syntax error, unexpected ')'
#ary.map{|x, (y,)| [x, y] }
# ^
ary.map{|x, (y)| [x, y] }
#=> [[11, 1], [22, 2], [33, 3]]
※ Tôi không yêu cầu cho một cách để có được những mảng truy nã.
Tôi muốn biết lý do tại sao đoạn mã này hoạt động là một trong các phiên bản của Ruby nhưng không phải là cả hai.
Nếu dấu phẩy dấu là cần thiết trong 'của Ruby 1.8', điều đó có nghĩa là có một số loại quy tắc đó biến mất? – oldergod
Tôi không nghĩ rằng nó là cần thiết rất nhiều vì nó phụ bước vấn đề. Toàn bộ ngữ nghĩa đối số khối có một đại tu khổng lồ trong 1.9. Đối số tùy chọn với mặc định và '* args' loại catch-alls hiện được hỗ trợ. Hành vi kỳ quặc này của việc không cho phép một danh sách với một mục, nhưng không quan tâm liệu danh sách thứ hai có thực sự được đặt tên dường như đã bị xóa hay không. – tadman