在Ruby中使用Trollop进行命令行解析,如何覆盖';版本';参数

在Ruby中使用Trollop进行命令行解析,如何覆盖';版本';参数,ruby,command-line-arguments,trollop,Ruby,Command Line Arguments,Trollop,我有一个Ruby程序,需要将版本作为参数。此版本是指程序将与之交互的资源的版本,而不是程序本身的版本。我找到了Trollop,并对它的简单性感到满意。但是,Trollop似乎会自动创建一个--version标志来打印程序的版本。我希望我的版本标志采用字符串作为参数 谷歌搜索在Trollup项目的History.txt中发现了以下内容: == 1.3 / 2007-01-31 * Wrap at (screen width - 1) instead of screen width. * User

我有一个Ruby程序,需要将版本作为参数。此版本是指程序将与之交互的资源的版本,而不是程序本身的版本。我找到了Trollop,并对它的简单性感到满意。但是,Trollop似乎会自动创建一个--version标志来打印程序的版本。我希望我的版本标志采用字符串作为参数

谷歌搜索在Trollup项目的History.txt中发现了以下内容:

== 1.3 / 2007-01-31
* Wrap at (screen width - 1) instead of screen width.
* User can override --help and --version.
* Bugfix in handling of -v and -h.
* More tests to confirm the above.
所以,从历史上看,我应该能够覆盖-,版本。 但是,当我创建--version选项并传入时,程序立即退出

opts = Trollop::options do
  opt : version, "The version to use.  ie. 1.0.1", :type => String, :required => true
end
上面的代码正确地要求传入版本参数。但是,当我传入它时,程序立即退出。我认为这是印刷版(显然是零)和退出


如何覆盖version以在Trollop中获取参数?

将您的选项定义为除
:version
之外的任何选项,然后将
:long
:short
表单配置为
version
v

opts = Trollop::options do
  opt :use_version, "The version to use.  ie. 1.0.1", 
    :long => 'version', :short => 'v', :type => String, :required => false
end
当您将选项定义为
:version
时,默认的
:version
定义将被覆盖,但当它看到提供了
:version
选项时,仍会进行Trollop。Trollop然后打印版本并立即退出


同样的想法也适用于
:help

能否将选项的名称更改为
:program\u version
或其他名称?我想知道您的输入是否与Trollop版本冲突。更改为program_版本确实有效,我认为您关于与Trollop版本冲突的说法是正确的。我只是想根据history.txt中的“用户可以覆盖--help和--version”这句话,也许有一种正确的方法可以覆盖它。我想你误解了它们的意思。该版本用于显示/覆盖Trollop程序版本(用户将运行的脚本)。但是,您想将版本作为其他版本的输入,对吗?没错。我想要作为参数的版本处理程序将与之交互的资源的版本,而不是程序本身的版本。