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

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?
我正在寻找一种使用内置符号(如上所示)的方法,但不必指定任务名称。

最佳答案

如果您查看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

关于ruby - 将参数传递给Rake默认任务而不指定任务名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19481581/

10-14 17:01
查看更多