【问题标题】:Pass arguments to Rake default task without specifying task name将参数传递给 Rake 默认任务而不指定任务名称
【发布时间】:2013-10-29 04:21:11
【问题描述】:

使用任务依赖表示法,您可以将参数传递给默认任务。例如,说“版本”是你的论点:

task :default, [:version] => [:build]

task :build, :version do |t,args|
  version = args[:version]
  puts version ? "version is #{version}" : "no version passed"
end

那么你可以这样称呼它:

$ rake
no version passed

$ rake default[3.2.1]
version is 3.2.1

$ rake build[3.2.1]
version is 3.2.1

但是,我还没有找到一种方法来避免在传递参数时指定任务名称(默认或构建)。

有没有人知道使用这种表示法而不必指定任务名称的方法? (即也利用“默认”语法?)

我知道接收参数的 ENV[] 方法,如下所述: How do I have the :default Rake task depend on a task with arguments?

我正在寻找一种使用内置符号(如上所示)但避免指定任务名称的方法。

【问题讨论】:

    标签: ruby rake


    【解决方案1】:

    如果你看一下rake源码,你可以看到这是不可能的(GitHub):

    # Collect the list of tasks on the command line.  If no tasks are
    # given, return a list containing only the default task.
    # Environmental assignments are processed at this time as well.
    def collect_tasks
      @top_level_tasks = []
      ARGV.each do |arg|
        if arg =~ /^(\w+)=(.*)$/m
          ENV[$1] = $2
        else
          @top_level_tasks << arg unless arg =~ /^-/
        end
      end
      @top_level_tasks.push(default_task_name) if @top_level_tasks.empty?
    end
    

    在此方法中,要运行的任务是从提供的参数中收集的。以- 开头的所有内容都将被忽略,foo=bar 形式的所有内容用于设置环境,其他所有内容都视为任务名称。

    如果您使用参数 (foo[bar]) 指定任务,则参数将在 parse_task_string 中解析。

    如果不指定任务,则使用default,不带任何参数。

    【讨论】:

    • 谢谢。我试图按照我们的方式遵循代码,但迷路了。你认为允许这样做的补丁有意义吗?我猜语法看起来有点奇怪
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多