我目前有这段代码:
def main()
info = []
CSV.foreach('test.csv') do |row|
info.push(row)
end
headers = info.shift
param = ARGV[0]
if param.downcase == "action1"
ans = func1(info, headers)
elsif param.downcase == "action2"
puts "Enter a value:\n"
extra_param = gets.chomp
p func2(info, headers, extra_param)
else
puts "Invalid Parameter"
end
end
当我尝试运行它时(使用'action2'作为命令行参数),我收到一条错误消息:
:in `gets': No such file or directory - action2 (Errno::ENOENT)
从我收集的内容来看,似乎在这种情况下“获取”不是等待用户输入,而是尝试使用我传入的命令行参数来打开/读取文件。如何使“get”等待用户输入并忽略命令行参数?
答案 0 :(得分:1)
不要执行param = ARGV[0]
,而是param = ARGV.shift
从ARGV
中移除参数。否则,如果您不想担心$stdin.gets
有任何意见,请使用ARGV
。
Kernel#gets
将从ARGV
读取,因此如果您在没有刷新它们的情况下传递了任何参数,则会出现上述错误,因为它试图从文件中读取命名为参数。