gpt4 book ai didi

ruby - 如何让两个雷神任务共享选项?

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:17 25 4
gpt4 key购买 nike

对于雷神,可以使用 method_option为特定任务设置选项。要为一类中的所有任务设置选项,可以使用 class_option。但是,如果想要一个类的一些任务而不是全部任务来共享选项呢?

在下面的 task1task2 中共享选项,但它们不共享所有选项,并且它们不与 task3 共享任何选项。

require 'thor'

class Cli < Thor
desc 'task1', 'Task 1'
method_option :type, :type => :string, :required => true, :default => 'foo'
def task1
end

desc 'task2', 'Task 2'
method_option :type, :type => :string, :required => true, :default => 'foo'
method_option :value, :type => :numeric
def task2
end

desc 'task3', 'Task 3'
method_option :verbose, :type => :boolean, :aliases => '-v'
def task3
end
end

Cli.start(ARGV)

对于 task1task2 就是违反了the DRY principle .有没有一种惯用的方法来处理这个问题?

最佳答案

method_optionthor.rb 中定义根据文档,它采用以下参数:

  • name<Symbol>::参数的名称。
  • options<Hash>::如下所述。

了解这一点后,您可以将参数存储到 method_option在数组中和 expand that array into separate parameters作为method_option被称为。

require 'thor'

class Cli < Thor
shared_options = [:type, {:type => :string, :required => true, :default => 'foo'}]

desc 'task1', 'Task 1'
method_option *shared_options
def task1
end

desc 'task2', 'Task 2'
method_option *shared_options
method_option :value, :type => :numeric
def task2
end

desc 'task3', 'Task 3'
method_option :verbose, :type => :boolean, :aliases => '-v'
def task3
end
end

Cli.start(ARGV)

我不知道这是否符合习惯,而且我认为它不是那么优雅。不过,这总比违反 DRY 原则要好。

关于ruby - 如何让两个雷神任务共享选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com