Ruby 从rake任务中删除重复
我有三个rake任务,它们修改一个实例变量,然后调用task:find,这是Rakefile: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 @
@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中添加参数非常有用。