cool_words = []
while true
cool_words.push gets
break if gets.chomp == ''
end
puts cool_words
它僅推動第一條目,然後在第三和然後第五。我認爲這是我擺脫循環的方式,因爲沒有break
方法它不會發生。紅寶石推送方法是交替
我需要它到break
走出循環,當我在空行輸入。
在此先感謝!
cool_words = []
while true
cool_words.push gets
break if gets.chomp == ''
end
puts cool_words
它僅推動第一條目,然後在第三和然後第五。我認爲這是我擺脫循環的方式,因爲沒有break
方法它不會發生。紅寶石推送方法是交替
我需要它到break
走出循環,當我在空行輸入。
在此先感謝!
您正在呼叫gets
兩次在循環中。它第一次被推入陣列。第二次是比較一個空字符串的循環中斷。但每次它都在尋求一條新線路。
您只想每個循環一次調用gets
。所以你可以將它保存在一個變量中,然後在代碼中多次使用該變量。
cool_words = []
while true
line = gets
cool_words.push line
break if line.chomp == ''
end
puts cool_words
UPDATE:@MicahelKohl在評論中指出,你可以更優雅地像這樣完成上述任務:
cool_words = []
until (line = gets).to_s.chomp.empty?
cool_words << line
end
puts cool_words
非常感謝! – 2012-02-22 08:47:07
爲什麼在循環條件下使用'while true'(Ruby有一個通用的'loop do' for btw)和'break':'until(line = gets.chomp).empty? cool_words <<行末' – 2012-02-22 09:40:20
@MichaelKohl,我更新了我的答案,以包含更優雅的構造。 – 2012-02-22 10:05:47
沒人要的,但如果你決定在某些時候採用一些函數式編程學習過程:'cool_words = $ stdin.lines.take_while(&:present?)'。 (當然,'present?'在active_support中,並且必須被要求(或者實現,一行),但是你明白了;-)) – tokland 2012-02-22 08:54:17
@tokland如果你不想ActiceSupport或者一個猴子補丁,'take_while {| line |不是line.chomp!.empty? }'仍然很容易閱讀。 – 2012-02-22 09:44:54
@邁克爾:是的,我知道,但我試圖用我最好的廣告出售FP :-) – tokland 2012-02-22 12:05:43