Ruby 从rake任务中删除重复

Ruby 从rake任务中删除重复,ruby,task,rake,rakefile,Ruby,Task,Rake,Rakefile,我有三个rake任务,它们修改一个实例变量,然后调用task:find,这是Rakefile: @tags = ['OPTIMIZE', 'TODO', 'FIXME'] task :optimize do @tags = ['OPTIMIZE'] Rake::Task["find"].invoke end task :todo do @tags = ['TODO'] Rake::Task["find"].invoke end task :fixme do @

我有三个rake任务,它们修改一个实例变量,然后调用task:find,这是Rakefile:

@tags = ['OPTIMIZE', 'TODO', 'FIXME']

task :optimize do
   @tags = ['OPTIMIZE']
   Rake::Task["find"].invoke
end

task :todo do
   @tags = ['TODO']
   Rake::Task["find"].invoke
end

task :fixme do
   @tags = ['FIXME']
   Rake::Task["find"].invoke
end

task :find do
   # finds words depending on @tags
end

我想删除Rakefile中的重复内容,使其更加简洁。如何简化或组合此Rakefile中的:optimize、:todo、:fixme任务?

Rake任务可以采用参数,因此您可以不依赖实例变量而将标记传入:

TAGS = ['OPTIMIZE', 'TODO', 'FIXME']

task :find, [:tags] do |task, args|
  # command lines can't pass an array, afaik; so if we pass the
  # tags in, we'll need them as a space separated list
  tags = if args[:tags]
           args[:tags].split(' ')
         else
           TAGS
         end

  puts "finding all tags marked: #{tags.inspect}"
end
然后在命令行上:

% rake find[TODO OPTIMIZE] # may need escaped: rake find\[TODO\ OPTIMIZE\]
finding all tags marked: ["TODO", "OPTIMIZE"]
% rake find                  
finding all tags marked: ["OPTIMIZE", "TODO", "FIXME"]
然后,如果您仍然希望将命名任务作为别名,并传递某些参数,则可以通过invoke传递它们:

并称之为:

% rake todo
finding all tags marked: ["TODO"]
% rake fixme   
finding all tags marked: ["FIXME"]
% rake optimize
finding all tags marked: ["OPTIMIZE"]

Rake任务可以接受参数,因此您可以传递标记,而不依赖实例变量:

TAGS = ['OPTIMIZE', 'TODO', 'FIXME']

task :find, [:tags] do |task, args|
  # command lines can't pass an array, afaik; so if we pass the
  # tags in, we'll need them as a space separated list
  tags = if args[:tags]
           args[:tags].split(' ')
         else
           TAGS
         end

  puts "finding all tags marked: #{tags.inspect}"
end
然后在命令行上:

% rake find[TODO OPTIMIZE] # may need escaped: rake find\[TODO\ OPTIMIZE\]
finding all tags marked: ["TODO", "OPTIMIZE"]
% rake find                  
finding all tags marked: ["OPTIMIZE", "TODO", "FIXME"]
然后,如果您仍然希望将命名任务作为别名,并传递某些参数,则可以通过invoke传递它们:

并称之为:

% rake todo
finding all tags marked: ["TODO"]
% rake fixme   
finding all tags marked: ["FIXME"]
% rake optimize
finding all tags marked: ["OPTIMIZE"]

美好的我不知道我可以在每个块中创建任务。还添加了参数:find非常有用。很好!我不知道我可以在每个块中创建任务。另外,在:find中添加参数非常有用。