2011-01-04 40 views
5

Tôi quên làm thế nào để theo dõi vị trí của các vòng trong Ruby. Thường thì tôi viết bằng JavaScript, AS3, Java, vvLàm thế nào để theo dõi các biến truy cập trong ruby, khối, cho, mỗi, làm

each:

counter = 0 
Word.each do |word,x| 
    counter += 1 
    #do stuff 
end 

for:

điều tương tự

while:

điều tương tự

block

Word.each {|w,x| } 

Điều này tôi thực sự không biết.

+0

Câu hỏi của bạn là gì? Tôi không hiểu bạn đang hỏi gì. –

+0

Ah, tôi biết đó là mơ hồ. Cách theo dõi biến số lượt truy cập. – s84

Trả lời

8

Ngoài phương thức Array#each_with_index của Ruby 1.8, nhiều phương pháp liệt kê trong Ruby 1.9 trả về một Bộ đếm khi được gọi không có khối; sau đó bạn có thể gọi phương thức with_index để có các điều tra viên cũng vượt qua cùng chỉ số:

irb(main):001:0> a = *('a'..'g') 
#=> ["a", "b", "c", "d", "e", "f", "g"] 

irb(main):002:0> a.map 
#=> #<Enumerator:0x28bfbc0> 

irb(main):003:0> a.select 
#=> #<Enumerator:0x28cfbe0> 

irb(main):004:0> a.select.with_index{ |c,i| i%2==0 } 
#=> ["a", "c", "e", "g"] 

irb(main):005:0> Hash[ a.map.with_index{ |c,i| [c,i] } ] 
#=> {"a"=>0, "b"=>1, "c"=>2, "d"=>3, "e"=>4, "f"=>5, "g"=>6} 

Nếu bạn muốn map.with_index hay select.with_index (hoặc tương tự) dưới của Ruby 1.8.x, bạn có thể làm nhàm chán-nhưng- này phương pháp nhanh:

i = 0 
a.select do |c| 
    result = i%2==0 
    i += 1 
    result 
end 

hoặc bạn có thể vui chơi thêm chức năng:

a.zip((0...a.length).to_a).select do |c,i| 
    i%2 == 0 
end.map{ |c,i| c } 
5

Nếu bạn sử dụng each_with_index thay vì each, bạn sẽ nhận được chỉ mục cùng với phần tử. Vì vậy, bạn có thể làm:

Word.each_with_index do |(word,x), counter| 
    #do stuff 
end 

Đối với while vòng bạn vẫn sẽ phải theo dõi bộ đếm.

+0

Vâng đây là những gì tôi đang tìm kiếm nhưng một bức tranh lớn hơn về tất cả chúng. – s84

+1

@Sam: Tôi không chắc chắn về hình ảnh lớn hơn của bạn. – sepp2k

+0

lol, tôi đoán tôi không nhớ. Tôi đoán những gì tôi có nghĩa là như trong javascript, bạn có thể khởi tạo truy cập trong vòng lặp, nhưng trong ruby ​​này không có vẻ trực quan bởi vì truy cập chỉ nên có. Không? – s84

3

một W vốn sẽ có nghĩa là nó là một hằng số mà rất có thể có nghĩa là nó một lớp hoặc một mô-đun không phải là một thể hiện của một lớp. Tôi đoán bạn có thể có một lớp học trở lại một enumerable sử dụng mỗi nhưng điều đó có vẻ rất kỳ quái.

Để loại bỏ rác thừa khó hiểu và ví dụ được viết hoa không chính xác, có thể, tôi sẽ làm cho mã của tôi trông như thế này.

words = get_some_words() 
words.each_with_index do |word, index| 
    puts "word[#{index}] = #{word}" 
end 

Tôi không chắc Sepp2K đang làm gì với điều kỳ lạ (từ, x).

Các vấn đề liên quan