Thor - 方法中无法识别命令行选项
Thor - command line option not recognized in method
我必须对 运行 我的 ruby
程序使用此命令:
$ruby filename.rb NAME --from="People" --yell
我有这样的脚本:
require 'thor'
class CLI < Thor
desc "hello NAME", "say hello to NAME"
method_option :from, :required => true
method_option :yell, :type => :boolean
def self.hello(name)
output = []
output << "from: #{options[:from]}" if options[:from]
output << "Hello #{name}"
output = output.join("\n")
puts options[:yell] ? output.upcase : output
end
end
CLI.hello(ARGV)
当我 运行 代码时,我得到以下输出:
c:\RubyWorkplace\Assignment1>ruby testing.rb Jay --from="Ray"
FROM: #<THOR::OPTION:0X000000031D7998>
HELLO ["JAY", "--FROM=RAY"]
c:\RubyWorkplace\Assignment1>ruby testing.rb Jay --from="Ray" --yell
FROM: #<THOR::OPTION:0X0000000321E528>
HELLO ["JAY", "--FROM=RAY", "--YELL"]
不管我指定与否,:yell
似乎总是有效,而options
在hello
方法中都被读取为name
输入。
从网上的教程中找了很多方法也试了很多方法都没有解决问题。请告诉我出了什么问题。谢谢!
问题是我在脚本中调用CLI.hello ARGV
引起的。程序运行时会调用hello
方法,并将所有命令行输入识别为hello
的参数,是一个数组。
解决此问题的方法之一是通过删除 self
使 hello
public,通过 start
方法调用脚本。
require 'thor'
class CLI < Thor
desc "hello NAME", "say hello to NAME"
method_option :from, :required => true
method_option :yell, :type => :boolean
def hello(name)
#do something
end
end
CLI.start ARGV
我必须对 运行 我的 ruby
程序使用此命令:
$ruby filename.rb NAME --from="People" --yell
我有这样的脚本:
require 'thor'
class CLI < Thor
desc "hello NAME", "say hello to NAME"
method_option :from, :required => true
method_option :yell, :type => :boolean
def self.hello(name)
output = []
output << "from: #{options[:from]}" if options[:from]
output << "Hello #{name}"
output = output.join("\n")
puts options[:yell] ? output.upcase : output
end
end
CLI.hello(ARGV)
当我 运行 代码时,我得到以下输出:
c:\RubyWorkplace\Assignment1>ruby testing.rb Jay --from="Ray"
FROM: #<THOR::OPTION:0X000000031D7998>
HELLO ["JAY", "--FROM=RAY"]
c:\RubyWorkplace\Assignment1>ruby testing.rb Jay --from="Ray" --yell
FROM: #<THOR::OPTION:0X0000000321E528>
HELLO ["JAY", "--FROM=RAY", "--YELL"]
不管我指定与否,:yell
似乎总是有效,而options
在hello
方法中都被读取为name
输入。
从网上的教程中找了很多方法也试了很多方法都没有解决问题。请告诉我出了什么问题。谢谢!
问题是我在脚本中调用CLI.hello ARGV
引起的。程序运行时会调用hello
方法,并将所有命令行输入识别为hello
的参数,是一个数组。
解决此问题的方法之一是通过删除 self
使 hello
public,通过 start
方法调用脚本。
require 'thor'
class CLI < Thor
desc "hello NAME", "say hello to NAME"
method_option :from, :required => true
method_option :yell, :type => :boolean
def hello(name)
#do something
end
end
CLI.start ARGV