5
Tôi nhận điều này:phân Parallel với dấu ngoặc đơn và ký hiệu toán tử
x,(y,z)=1,*[2,3]
x # => 1
y # => 2
z # => nil
Tôi muốn biết lý do tại sao z
có giá trị nil
.
Tôi nhận điều này:phân Parallel với dấu ngoặc đơn và ký hiệu toán tử
x,(y,z)=1,*[2,3]
x # => 1
y # => 2
z # => nil
Tôi muốn biết lý do tại sao z
có giá trị nil
.
x, (y, z) = 1, *[2, 3]
Các splat *
ở bên phải được mở rộng nội tuyến, do đó, nó tương đương với:
x, (y, z) = 1, 2, 3
Danh sách trong ngoặc đơn ở phía bên trái được coi là nhiệm vụ lồng nhau, do đó, nó tương đương với:
x = 1
y, z = 2
3
bị hủy, trong khi z
được gán cho nil
.
Câu trả lời hay. Và nếu 'x, (y, z), u = 1, * [2, 3]' thì 'x # => 1; y # => 2; z # => nil; u # => 3'. –
Ok vì vậy splat có ưu tiên hơn các giá trị parantheses và các parantheses xử lý các giá trị trong chúng như một đơn vị duy nhất –
Tôi không nghĩ rằng ưu tiên là có liên quan ở đây, như dấu ngoặc đơn và splat là trên các mặt đối diện của sự bình đẳng. Chìa khóa là tuyên bố của Yu, "Splat' * 'ở bên phải ...". Việc gán song song làm cho 'x' được đặt bằng' 1', '(y, z)' được đặt bằng '2' và cứ tiếp tục, và nếu' (y, z) = 2', thì 'y # => 2; z # => nil'. –