我正在尝试使用其 Ruby 平台在 repl.it 上开发一个程序。这是我得到的:
puts "Copy the entire request page and paste it into this console, then
hit ENTER."
request_info = gets("Edit Confirmation").chomp.gsub!(/\s+/m, '
').strip.split(" ")
puts "What is your name?"
your_name = gets.chomp
puts "Thanks, #{your_name}!"
我的方式是,用户粘贴一个多行请求,以
"Edit Confirmation"
结尾,然后它将请求逐字拆分到自己的数组中,以便我解析并提取相关内容数据。
但是在开始时最初询问用户多行输入后,我似乎无法再次使用
gets
命令。之后我尝试使用的任何其他 gets
命令都会被跳过,并且程序结束。
您的代码正在做一些非常不寻常的事情:通过将字符串传递给
gets
方法,您实际上是在 更改输入分隔符:
gets(sep, limit [, getline_args]) → string or nil
从 I/O 流中读取下一个“行”;行以 sep 分隔。
您的代码未按预期工作的原因是因为输入缓冲区中留下了尾随的
"\n"
字符 - 因此第二次调用 gets
会立即返回该字符串。
也许解决这个问题的最简单方法就是在第一个
gets
调用中吸收这个角色:
request_info = gets("Edit Confirmation\n").chomp.gsub!(/\s+/m, ' ').strip.split(" ")
对于像这样的“复杂”多行输入,更常见的做法是将文件名参数传递给 ruby 脚本,然后读取该文件,而不是将其粘贴到终端中。
或者,您可以使用
gets(nil)
读取直到出现 EOF
字符,并要求用户按 CTRL+D
表示多行输入结束。
嗯mmmmmmmmmmmmmmmmmmmmmmmmmm哥们....