Tôi đang học những điều cơ bản của Ruby (chỉ mới bắt đầu), và tôi đã xem qua số Hash.[]
method. Nó đã được giới thiệu vớiCó "quy tắc" cho đường cú pháp của Ruby không?
a = ["foo", 1, "bar", 2]
=> ["foo", 1, "bar", 2]
Hash[*a]
=> {"foo"=>1, "bar"=>2}
Với một chút suy nghĩ, tôi đã tìm ra rằng Hash[*a]
tương đương với Hash.[](*a)
hoặc Hash.[] *a
. Câu hỏi của tôi là tại sao lại như thế. Nó cho phép bạn đặt *a
bên trong dấu ngoặc vuông là gì và có loại quy tắc nào ở đâu và khi nào khác "nó" có thể được sử dụng?
Chỉnh sửa: Từ ngữ của tôi có vẻ gây nhầm lẫn. Tôi không hỏi về việc mở rộng mảng. Tôi hiểu rồi. Câu hỏi của tôi về cơ bản là: nếu []
là tên phương thức, tại sao việc đặt các đối số bên trong dấu ngoặc đơn là không quan trọng? Nó có vẻ gần như - nhưng không hoàn toàn - như nói rằng nếu bạn có một phương pháp Foo.dood
, và bạn muốn vượt qua chuỗi "hey"
với nó, sau đó bạn có thể viết Foo.do"hey"od
.
Tôi thấy rất nhiều câu trả lời tập trung vào '* a' trong lời gọi phương thức. Tuy nhiên, sẽ tốt hơn nếu thấy các sản phẩm khác được giải quyết, chẳng hạn như tại sao '[1, * a]' hoạt động như mong đợi "(cho kết quả khác với' [1, a] ') và tại sao' [* a, 1] 'không hợp lệ. Nó cũng sẽ được tốt đẹp để xem làm thế nào "splat" liên quan đến nhiệm vụ và làm thế nào nó có thể/không tương tác với phân công-phân hủy của Ruby ... có lẽ được cho là một câu hỏi SO hoàn toàn ;-) Nó sẽ được * thực sự tốt đẹp * nếu có một ruby bán chính thức. Liên kết đến bán hàng kỹ thuật sẽ làm cho câu trả lời tốt hơn. –
@pst: câu hỏi hay. Nếu bạn hỏi một câu hỏi SO mới về nó, hãy đăng liên kết ở đây để tôi có thể theo dõi nó. –
lưu ý rằng cách thông thường sử dụng nó là gửi một mảng các cặp: Hash [[[key1, value1], [key2, value2]]] – tokland