您好,我正在制作一个简单的ruby脚本,其中我使用gets.chomp
和参数创建了一个表单,问题是当gets.chomp
使用时,脚本在我应用参数test
时返回错误。
代码:
# !usr/bin/ruby
def formulario(quien)
while (1)
print "[+] Word : "
word = gets.chomp
print quien + " -> " + word
end
end
quien = ARGV[0]
formulario(quien)
错误:
[+] Word : C:/Users/test/test.rb:8:in `gets': No such file or directory @ rb_sysopen - test (Errno::E
NOENT)
from C:/Users/test/test.rb:8:in `gets'
from C:/Users/test/test.rb:8:in `formulario'
from C:/Users/test/test.rb:17:in `<main>'
有人能帮忙吗?
3条答案
按热度按时间zy1mlcev1#
看起来您想让用户通过读取
STDIN
中的一行来输入一些输入,最好的方法是调用STDIN.gets
而不是gets
。所以你的台词变成了:这被记录为
IO.gets
。STDIN
是IO
的示例。现在,您正在执行
Kernel.gets
,它做了一些不同的事情(重点是我的):返回(并分配给$_)ARGV中文件列表(或$)中的下一行,如果命令行上没有文件,则返回来自标准输入的。
如果
ARGV
为空,则这看起来*行为类似于STDIN.gets
,但不是一回事,因此产生了混淆。hof1towb2#
如果您程序处理空参数或非空参数。您可以使用此模块(特别是如果您已经在任何地方使用默认的
gets
)然后你可以把它放在你的班级里
qmelpv7a3#
我今天在Ruby 3.1.2中遇到了这个问题。我还可以确认,STDIN.GETS避免了这个问题。另一种解决方法是在通过GET捕获输入之前将ARGV设置为空数组。您可以简单地设置
或者,如果您必须在处理完它们之前获得输入,则将它们存储在其他地方