2011-11-17 126 views
0

我正在使用Ruby腳本語言。我在這裏有一個片段。只是想知道在循環中發生了什麼。這裏是我的代碼代碼段是什麼意思?

#!/usr/bin/ruby 

presidents = ["Ford", "Carter", "Reagan", "Bush1", "Clinton", "Bush2"] 

for ss in 0...presidents.length 
    print ss, ": ", presidents[presidents.length - ss - 1], "\n"; 
end 

我知道,這是打印以相反的順序排列,但我的目的是要知道什麼是

"presidents[presidents.length - ss - 1]" 

發生,請幫助我理解這一點。我對此很困惑。

+0

鏈接到有問題代碼段的網站是一個好主意,以便回答問題的人可以在上下文中看到它。是http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm嗎? –

回答

6

這意味着,無論誰寫這段代碼,他仍然在學習Ruby :-p。這是更地道,而且我希望,不言自明:

presidents.reverse_each.with_index do |name, index| 
    puts "#{index}: #{name}" 
end 

關於presidents[presidents.length - ss - 1]ss從0開始,所以length-0-1 = length-1 - 的presidents>最後一個元素。在循環的最後一次迭代中,您有length - (length-1) -1 = 0,因此將顯示presidents的第一個元素。一個簡單的倒退,沒有什麼幻想。

+2

'.reverse_each.with_index'避免了額外的數組。 – steenslag

+0

@steenslag:對於一個novicer來說理解起來有點棘手,但是從概念上講,如果你要循環使用值,這是正確的。 – tokland

+1

有這個代碼片段的網站也有很多其他方法來解決這個問題。 http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm –