运行 特定版本的 ruby 脚本(如果输入命令行参数)

run specific version of ruby script if command line argument is entered

我已经通读了我的问题的大量变体,但我似乎找不到真正与我正在尝试做的事情相匹配的一个。

我有一个基本上有两个版本的脚本:"default" 将通过一系列强制方法 运行,第二个版本将通过这些相同的方法 运行,然后附加一系列辅助方法。我希望第二个版本是从命令行触发的(类似于 $ script.rb second_version),而 "default" 选项完全不需要输入参数来触发(因为它会被更频繁地使用,所以只是 $ script.rb).

我用 ARGV 试过这个:

second_version = ARGV[0]

if second_version
   second_version_methods
else
  main_version
end

这在技术上可行,但问题是 main_version 脚本中 运行 的第一个方法是需要用户输入的方法。最终发生的是字符串 "second_version" 作为值自动传递给该方法,这是我不想要的。

本质上,有没有办法让命令行参数 以特定方式指定 运行 的条件,然后一旦完成,它只是丢弃输入?我研究过 optparse 但它的功能似乎有点多余。

谢谢!

ARGV 不是只读的,因此您可以像这样使用第一个输入:

if ARGV[0] == 'second_version'
  ARGV.shift # removes the first element 
  second_version_methods
else
  main_version
end

如果你想保持 ARGV 完好无损(这是一个更好的主意),你可以这样做:

arguments = ARGV.dup

if arguments[0] == 'second_thing'
  arguments.shift
# ...