我可能在這裏使用了一個用詞不當。我希望在循環的第一次迭代中只設置一次變量,並保留其以前迭代的值。例如,如果未設置,我將變量值設置爲0。然後,基於迭代邏輯,該值可以改變,並且在下一次迭代中它將顯示來自先前迭代的值。
有什麼想法?謝謝。Ruby 1.8.7中的靜態循環變量
0
A
回答
2
也許我不明白這個問題,你可以在循環前設置變量,然後你可以修改裏面的值。 如果在循環外設置「var」,則可以在所有循環中修改和使用它。
var, run = nil, true
while run
var = 1 unless var
puts "IN: #{var}"
if var > 1
run = false
break
end
var += 1
end
puts "OUT: #{var}"
# => IN: 1
# => IN: 2
# => OUT: 2
也許這樣?您可以使用Proc.new,但它之前是同一行。
process = Proc.new{|var|
var = 0 unless var # first set if nil
puts "IN: #{var}"
var
}
run, i = true, 0
while run
var = process.call(var)
puts "After process: #{var}"
break unless run = (i < 2)
var += 1 # logic modify
i += 1
end
puts "OUT: #{var}"
# => [true, 0]
# => IN: 0
# => After process: 0
# => IN: 1
# => After process: 1
# => IN: 2
# => After process: 2
# => OUT: 2
0
這裏有沒有做你想要的另一種方式。
b = binding
3.times do |i|
eval("foo = (foo.nil?) ? 10 : (foo+1)", b)
eval("p foo", b)
p binding
end
它不會像你想要的那樣工作的根本原因是因爲Ruby爲每次通過循環創建一個新的綁定。除了使用外部綁定作爲定位點外,我想不出任何詭計。我使用eval接口來連接外部綁定,僅用於說明。正如你已經知道的,做同樣事情的正確方法是隻在循環外聲明一個變量。
10
#<Binding:0x00000001708f40>
11
#<Binding:0x000000017089a0>
12
#<Binding:0x00000001708428>
相關問題
- 1. ruby中的靜態變量
- 2. while循環和靜態變量
- 3. ruby中的靜態/實例變量
- 4. 靜態類中的靜態變量和非靜態類中的靜態變量
- 5. 如何在while或for循環中總結變量靜態值?
- 6. 動態變量循環
- 7. Javascript-動態變量循環
- 8. Ruby變量的每個循環替換
- 9. 循環中的動態變量python
- 10. as3循環中的動態變量
- 11. 靜態函數中的靜態變量?
- 12. jQuery如何替換函數中的每個循環動態的靜態變量
- 13. Ruby假設 - 變量嵌套循環
- 14. Ruby每個循環變量替換
- 15. 在循環中引用動態變量
- 16. PHP:引用靜態變量中的另一個靜態變量
- 17. 全局靜態變量vs函數中的靜態變量?
- 18. 同一類中的Java靜態變量和非靜態變量
- 19. 來自靜態環境的非靜態變量
- 20. Ruby 1.8.7中的NoMethodError
- 21. Ruby中的flat_map 1.8.7
- 22. PHP中的靜態變量變量
- 23. C++中的靜態變量
- 24. PHP中的靜態變量
- 25. WCF中的靜態變量
- 26. ObjectiveC中的靜態變量
- 27. TSQL中的靜態變量?
- 28. Tcl中的靜態變量
- 29. CodeIgniter中的靜態變量
- 30. R中的靜態變量
嗨盧卡斯。這就是我所知道的。我想知道是否有循環內的一種方式。我曾經想過,我已經在循環中讀取了某種方式來執行此操作,並將其保留在循環範圍內。但我可能是錯的。 – user1134991
@ user1134991我不知道,但這可能有所幫助。或者你可以使用實例變量,但我沒有找到關於這個問題的信息。所以也許這不是「簡單」的方式來做到這一點。 –
你爲什麼如此關注範圍?這是一個循環。如果你在裏面聲明瞭一些東西,那就是它的作用域,並且這可能會根據所使用的結構重置每個迭代。通過將它放在循環之外,你可以聲明它的意圖,以便它在迭代之間保持不變。 – tadman