2009-07-19 29 views
5

Đây có phải là cách DRYest để làm điều đó bằng ruby ​​không?khởi tạo và tăng biến trong một dòng mã

<% for item in @items %> 
    <%= n = n + 1 rescue n = 1 %> 
<% end %> 

mà khởi "n" để '1" và increments nó như vòng lặp tiến (và in nó ra) vì đây là trong quan điểm một ứng dụng của tôi

Trả lời

16

Bạn có thể sử dụng một nhà điều hành ternary:

<% for item in @items %> 
    <%= n = n ? n+1 : 1 %> 
<% end %> 

Nhưng, tùy thuộc vào những gì bạn đang cố gắng để làm, tôi đoán một each_with_index sẽ thích hợp hơn

<% @items.each_with_index do |item, n| %> 
    <%= n %> 
<% end %> 
+0

Ah tốt, tôi đoán tùy chọn thứ hai là những gì tôi đang tìm kiếm. – Zepplock

+0

Ngoài ra, có cách nào để gán giá trị ban đầu cho "n" không? – Zepplock

+2

Chỉ định giá trị ban đầu và sau đó tăng thêm 1 lần mỗi lần? Chỉ mục không phải là bộ đếm - đó là chỉ mục. Nếu bạn muốn tăng nó bằng cách bù đắp cố định, chỉ cần thêm nó khi bạn in: <%= n + 5 %> – zaius

0

Um.

n = @items.size 
+0

Không, @ items.size là hằng số (trong phạm vi vòng lặp) – Zepplock

+0

Ah, tôi cho rằng bạn có nghĩa là bạn đang làm điều gì đó [i ] khác [/ i] với nó trong vòng lặp, không được hiển thị trong ví dụ của bạn? –

5

Bạn cũng có thể dựa vào sự ép buộc của ruby ​​thành số nguyên dẫn đến 0.

<% for item in @items %> 
    <%= n = n.to_i + 1 %> 
<% end %> 
Các vấn đề liên quan