使用"获取"用于用户输入

时间:2014-06-25 01:21:55

标签: ruby

我目前有这段代码:

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”等待用户输入并忽略命令行参数?

1 个答案:

答案 0 :(得分:1)

不要执行param = ARGV[0],而是param = ARGV.shiftARGV中移除参数。否则,如果您不想担心$stdin.gets有任何意见,请使用ARGV

Kernel#gets将从ARGV读取,因此如果您在没有刷新它们的情况下传递了任何参数,则会出现上述错误,因为它试图从文件中读取命名为参数。