2013-01-19 39 views

Trả lời

18

Để làm điều gì đó tương tự như ví dụ thứ hai, bạn vẫn sẽ cần phải tạo ba mảng:

a1, a2, a3 = [], [], [] 
+5

Nếu đối tượng được phân công xảy ra là bất biến (như, nói: '42'), thì đây có thể là“đơn giản hóa”cho' a1, a2, a3 = [42] * 3'. –

+5

Dường như với tôi rằng sẽ đơn giản hơn như: 'a1 = a2 = a3 = 42' – pguardiario

+0

Đây là một sự xấu hổ đáng hổ thẹn. Và rời khỏi phòng để tìm lỗi. a = b = [] sẽ gán mảng trống cho b nhưng sẽ chỉ là tham chiếu đến b, không phải là thứ bạn muốn. a, b = [] sẽ gán nil cho cả a và b, vì mảng trống và điều này thực hiện phép gán parralel. Như bạn có thể thấy, không có cách nào khác ngoài a, b = [], [], đó là một sự xấu hổ đáng hổ thẹn.DONATO – Donato

5

Nếu bạn khăng khăng không lặp lại những [] đen, sau đó một cách là:

a1, a2, a3 = Array.new(3){[]} 

Một cách khác là:

a1 = (a2 = (a3 = []).dup).dup 
+0

Tôi nghĩ rằng điều này có thể mất một hit hiệu suất phụ, so với a, b = [], [], vì lời gọi khối. Nhưng đó chỉ là phỏng đoán của tôi. – Donato

3

của Ruby Nhiều chuyển nhượng là bất ngờ trong s bên dưới ituations:

a1, a2, a3 = [] 

Mã trên sẽ không gán mảng trống trong bất kỳ biến mảng nào.

sử dụng,

a1, a2, a3 = [], [], [] 

Bạn cần cung cấp số giá trị như số biến được sử dụng để khởi tạo.

0

Bạn cũng có thể làm như sau:

a1=[]; a2=[]; a3=[] 
+3

cách này nghìn dòng mã có thể được viết trong một lớp lót ...;) –

0

đoạn sau sẽ cư xử theo cách tương tự trên tất cả ruby ​​máy ảo?

a,b = b,nil 

Điểm của lớp lót này là đặt 'a' thành giá trị từ 'b' và đặt lại 'b'.

2

Câu trả lời này được thiết kế quá mức, tập trung vào việc sử dụng sai lệch Array trong mẫu của OP.

a1 = a2 = a3 = [] 
# => [] 

Kiểm tra kết quả

a1 
# => [] 
a2 
# => [] 
a3 
# => [] 
a4 # for sake of comparison 
NameError: undefined local variable or method `a4' for main:Object 
Các vấn đề liên quan