假设我有一个剧本:
!#usr/bin/ruby
# step 1
puts "That's first"
# some code
#step 2
puts "That's second"
# some code
有没有办法将ARGV传递给将从特定行(或步骤,类或其他)开始执行的脚本?
例如,执行$ ruby script.rb -s 2
将从第二步开始。
我考虑过使用if\else
解析参数,但在这种情况下,脚本会变得更复杂,而且根本不会干。
有什么想法吗?
答案 0 :(得分:4)
这是一个可以更优雅地解决问题的提案:
在' define_steps.rb'中定义您的步骤:
# define_steps.rb
#####################################################
@steps = []
def step(i, &block)
@steps[i] = block
end
def launch_steps!(min = 0, max = @steps.size - 1)
@steps[min..max].each.with_index(min) do |block, i|
if block
puts "Launching step #{i}"
block.call
end
end
end
#####################################################
step 1 do
puts 'Step 1 with lots of code'
end
step 2 do
puts 'Step 2 with lots of code'
end
step 3 do
puts 'Step 3 with lots of code'
end
step 4 do
puts 'Step 4 with lots of code'
end
使用launch_steps.rb
单独启动它们:
# launch_steps.rb
require_relative 'define_steps'
launch_steps!
puts "-----------------"
launch_steps!(2,3)
输出:
Launching step 1
Step 1 with lots of code
Launching step 2
Step 2 with lots of code
Launching step 3
Step 3 with lots of code
Launching step 4
Step 4 with lots of code
-----------------
Launching step 2
Step 2 with lots of code
Launching step 3
Step 3 with lots of code
不带参数的 launch_steps!
运行每个已定义的步骤,launch_steps!(min,max)
在min
和max
之间的每一步运行,launch_steps!(min)
运行步骤min
继续。