Ruby - 运行 没有参数的 Thor 命令

Ruby - run Thor command without argument

我必须使用这个命令来执行脚本:

$ruby file.rb keyword --format oneline --no-country-code --api-key=API

其中,formatno-country-codeapi-keythor选项。 keyword 是我方法中的参数:

class TwitterTrendReader < Thor
    method_option :'api-key', :required => true
    method_option :format
    method_option :'no-country-code', :type => :boolean

    def execute (keyword)
        #read file then display the results matching `keyword`
    end

default_task :execute
end

问题是 keyword 是可选的,如果我 运行 命令没有 keyword,脚本应该打印文件中的所有条目,否则,它只显示匹配 keyword.

的条目

所以我有这个代码:

if ARGV.empty?
  TwitterTrendReader.start ''
else
  TwitterTrendReader.start ARGV
end

它只在我指定 keyword 但没有 keyword 时有效,我得到这个:

$ruby s3493188_p3.rb --api-key="abC9hsk9"
ERROR: "s3493188_p3.rb execute" was called with no arguments
Usage: "s3493188_p3.rb [keyword] --format oneline --no-country-code --api-key=API-KEY"

所以请告诉我使参数可选的正确方法是什么。谢谢!

您当前对 def execute (keyword) 的实现具有多样性 1(也就是说,它声明了一个强制参数。)如果您想能够省略它,请将该参数设为可选。

改变

def execute (keyword)
    #read file then display the results matching `keyword`
end

至:

def execute (keyword = nil)
  if keyword.nil?
    # NO KEYWORD PASSED
  else
    # NORMAL PROCESSING
  end
end