2010-05-28 19 views
45
a = b = c = d = 5 

puts (a) >> 5 
puts (b) >> 5 
puts (b) >> 5 
puts (b) >> 5 
a= a+1 
puts (a) >> 6 
puts (b) >> 5 

Tôi thấy không có vấn đề với việc gán các giá trị như thế này. Câu hỏi của tôi là một trong những nên gán như một trong những ở trên hoặc như thế này?Có quyền gán nhiều biến như thế này a = b = c = d = 5 không?

a , b, c, d = 5, 5, 5, 5 
+1

ví dụ trên của bạn cũng hoạt động tuyệt vời cho '' true' nil' và 'FALSE' :) – MMachinegun

Trả lời

87

Điều cần lưu ý ở đây là trường hợp của bạn chỉ hoạt động OK vì số không thay đổi trong Ruby. Bạn không muốn làm điều này với chuỗi, mảng, băm hoặc khá nhiều bất cứ điều gì khác ngoài con số, bởi vì nó sẽ tạo ra nhiều tài liệu tham khảo để cùng một đối tượng, đó là gần như chắc chắn không phải những gì bạn muốn:

a = b = c = d = "test" 
b << "x" 
=> "testx" 
a 
=> "testx" 

trong khi hình thức song song là an toàn với tất cả các loại:

a,b,c,d = "test","test","test","test" 
=> ["test", "test", "test", "test"] 
b << "x" 
=> "testx" 
a 
=> "test" 
+0

thanx glenn rất hữu ích :) – Salil

+0

bạn nên làm điều này với bất kỳ chuỗi nào bạn định sử dụng như một hằng số, đúng không? –

+2

bạn có thể DRY nó lên hơn nữa: 'a, b, c, d =% w (kiểm tra) * 4' – nerfologist

8

Không có gì sai khi chỉ định theo cách đó (a = b = c = d = 5). Cá nhân tôi thích nó hơn nhiều nhiệm vụ nếu tất cả các biến cần phải có cùng một giá trị.

Dưới đây là một cách khác:

a, b, c, d = [5] * 4 
+0

Năm điều cần bốn biến? –

+3

@Donal: Rất tiếc.Tôi đoán nó có nghĩa là thêm 5 không ai muốn. :( –

0

tôi không sử dụng ruby ​​ở tất cả, do đó có thể là một thành ngữ có thể chấp nhận, nhưng a = b = c = d = 5 trông khá xấu xí với tôi. a , b, c, d = 5, 5, 5, 5 trông đẹp hơn, IMO.

+0

5,5,5,5 không phải là quá nhiều sự lặp lại? –

+0

@ArnoldRoa nó có thể duy trì được nhiều hơn [5] * 4, IMO – drusepth

6

Nếu cảm thấy tốt, hãy làm.

Ngôn ngữ cho phép, như bạn đã phát hiện và nó hoạt động như bạn mong đợi. Tôi muốn đề nghị rằng câu hỏi duy nhất bạn nên tự hỏi mình về sự biểu cảm: là mã cho bạn biết mục đích của nó là gì?

Cá nhân, tôi không đặc biệt thích sử dụng cấu trúc này nhiều hơn là khởi tạo cho các giá trị mặc định, tốt nhất là không. Lý tưởng nhất là các biến để khởi tạo tất cả sẽ có một mục đích tương tự như là tốt, quầy, ví dụ. Nhưng nếu tôi có nhiều hơn một vài biến tương tự, tôi có thể xem xét việc khai báo chúng là một dạng trùng lặp, được tái cấu trúc, ví dụ, một Hash.

+0

+1, Đây là câu trả lời đúng. thành ngữ, nhưng tôi chỉ có thể nghĩ đến vài trường hợp cần có sự phân công như vậy –

4

Hai lần khởi tạo này có nghĩa khác nhau. Các a = b = c = d = 5 có nghĩa là "tất cả các biến của tôi nên được khởi tạo cho cùng một giá trị, và giá trị này là 5". Một số khác, a, b, c, d = 5, 5, 5, 5, có nghĩa là "Tôi có danh sách các biến và danh sách giá trị init tương ứng".

Logic của bạn sao cho tất cả các biến phải luôn giống nhau? Sau đó, cái đầu tiên tốt hơn. Nếu không, cái thứ hai có thể tốt hơn. Một câu hỏi khác: danh sách của bạn là 4 biến toàn diện? có khả năng bạn sẽ thêm hoặc xóa một biến khác cho nhóm này không? Nếu vậy, tôi đề xuất một biến thể khác thay thế:

a = 5 
b = 5 
c = 5 
d = 5 
3

tôi đã từng bị cắn với một. Nó có thể giúp bạn tiết kiệm một vài tổ hợp phím ngày hôm nay nhưng đến để cắn bạn sau này. Như @glenn đã đề cập, nó tạo ra nhiều tham chiếu đến cùng một đối tượng.

Ví dụ: Đây áp dụng cho cả ruby ​​1.81.9

> a = b = Array.new 
=> [] 
> a.object_id == b.object_id 
=> true 
> a << 1 
=> [1] 
> b << 2 
=> [1, 2] 
Các vấn đề liên quan