如何在Ruby2.6.3中从用户接收多个段落?

时间:2019-05-19 14:23:07

标签: ruby

我正试图一次从一个用户接收多个段落。

我尝试使用gets,但是它似乎不起作用...它丢弃了第二段:

#The code:
   print("Paste your text here: ") 
.. essay = gets 
.. puts(essay)

# Getting user imput (the second sentance is a separate paragraph)
Paste your text here:  I like cake.
 It makes me happy.

# What the computer did for puts(essay):
I like cake.
=> nil

我希望结果是这样的:

"I like cake.\nIt makes me happy.\n"

但是它给了我"I like cake."。 我怎么能得到预期的结果?

2 个答案:

答案 0 :(得分:1)

将段落添加到字符串中,直到输入由空行组成:

str  = ""
para = "init"
str << (para = gets) until para.chomp.empty? #or para == "\n"
p str

答案 1 :(得分:0)

这是另一种选择,逻辑略有不同

def getps
  save, $/ = $/, "\n\n"
  gets.chomp
ensure
  $/ = save
end

str = getps

Ruby使用全局变量$/来确定行尾是什么。 gets直到行结束为止。如果我们告诉Ruby行尾是两个换行符,那么gets会一直等到我们连续有两个换行符后才退出。由于我们不需要它们,因此我们将其砍掉。其余代码只是为了确保$/之后能够正确恢复,因此正常的gets不会永远混乱。