您好我正在制作一个简单的ruby脚本,我使用gets.chomp
和参数创建表单,问题是当gets.chomp
使用脚本时,当我应用参数时test
返回错误{{ 1}}。
代码:
#!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>'
有人可以帮忙吗?
答案 0 :(得分:75)
看起来您希望用户通过阅读STDIN
中的一行来输入一些输入,最好的方法是调用STDIN.gets
而不是gets
。所以你的行变成了:
word = STDIN.gets.chomp
记录为IO.gets
。 STDIN
是IO
的实例。
现在,您正在执行Kernel.gets
,这会做一些不同的事情(强调我的):
从ARGV (或$ *)中的文件列表中返回(并指定$ _)下一行,如果没有文件,则从标准输入返回 在命令行上。
如果STDIN.gets
为空,则此显示为,表现得像ARGV
,但不是同一回事,因此会产生混淆。
答案 1 :(得分:0)
如果程序处理空参数或非空参数。您可以使用此模块(特别是如果您已经在所有地方使用默认的gets
)
# A module that help to use method gets no matter what the file argument is
module InputHelper
# Handle input method based on its file argument
def gets
if ARGV.nil?
Kernel.gets
else
STDIN.gets
end
end
end
然后您可以将其包含在您的课程中
require 'input_helper'
class YourClass
...
include InputHelper
...
end