ruby推送方法是交替的

ruby推送方法是交替的,ruby,push,Ruby,Push,它只是推动第一个入口,然后是第三个入口,然后是第五个入口。我认为这是我打破循环的方式,因为如果没有break方法,它就不会发生 当我在空行上按enter键时,我需要它将从循环中打断 提前谢谢 您正在调用的在循环中获取两次。第一次将其推入阵列时。第二次,它将与空字符串进行比较,以进行循环中断。但每一次它都要求一条新的线路 每个循环只需调用get一次。因此,您可以将其保存在变量中,然后在以后的代码中多次使用该变量 cool_words = [] while true cool_words

它只是推动第一个入口,然后是第三个入口,然后是第五个入口。我认为这是我打破循环的方式,因为如果没有
break
方法,它就不会发生

当我在空行上按enter键时,我需要它将从循环中打断


提前谢谢

您正在调用的
在循环中获取两次
。第一次将其推入阵列时。第二次,它将与空字符串进行比较,以进行循环中断。但每一次它都要求一条新的线路

每个循环只需调用
get
一次。因此,您可以将其保存在变量中,然后在以后的代码中多次使用该变量

cool_words = []

while true

    cool_words.push gets
    break if gets.chomp == ''

end

puts cool_words
更新:@MicahelKohl在评论中指出,您可以像这样更优雅地完成上述任务:

cool_words = []

while true
    line = gets
    cool_words.push line
    break if line.chomp == ''
end

puts cool_words
cool_words=[]
直到(line=gets).到\u.chomp.empty?

酷词没人问,但如果你决定在学习过程中的某个时候应用一些函数编程:
酷词=$stdin.lines.take_while(&:present?)
。(当然,
present?
处于活动支持状态,必须是必需的(或实现的,一行),但你明白了;-)@tokland如果你不想为这么简单的事情提供活动支持或猴子补丁,
趁{line |而不是line.chomp!。empty?
仍然很容易阅读。@Michael:是的,我知道,但是我试着用我最好的广告来推销FP:-)为什么要使用
,而true
(Ruby有一个通用的
循环do
,顺便说一句)和
break
当你有一个循环条件时:
直到(line=get.chomp)。空?cool_words@MichaelKohl,我更新了我的答案,加入了更优雅的结构。你可能应该检查#get returning nil的情况,尽管OP没有要求它。一种方法是
until(line=gets)。to_.s.empty?
@eregon
gets
Ctrl-D
上只返回
nil
,不是吗?这一点很好。@MichaelKohl它在Ctrl-D上有,但在任何类型的EOF上也有(因此,如果你用管道将某个文件传输到stdin,如果它没有空行,它将失败)
cool_words = []

until (line = gets).to_s.chomp.empty?
    cool_words << line
end

puts cool_words