我如何从耙子任务中提前退回?
我有一个rake任务,我在开始时进行一些检查,如果其中一个检查失败,我想从rake任务提前返回,我不想执行任何剩余的代码。
我认为解决scheme将是我想从代码中返回的地方,但我得到以下错误
unexpected return
Rake任务基本上是一个块。 除了lambdas以外的块不支持返回,但是可以跳到下一个语句,使用next
在rake任务中具有使用方法中的return的相同效果。
task :foo do puts "printed" next puts "never printed" end
或者你可以在一个方法中移动代码,并在方法中使用return。
task :foo do do_something end def do_something puts "startd" return puts "end" end
我更喜欢第二select。
您可以使用任务中的abort(message)
来通过消息中止该任务。
如果您需要跳出多个块级别,则可以使用失败 。
例如
task :something do [1,2,3].each do |i| ... fail "some error" if ... end end
在这种情况下,我倾向于使用abort
,这是一个更好的select,例如:
task :foo do something = false abort 'Failed to proceed' unless something end
如果你的意思是退出rake任务而不会导致“rake中止!” 消息要打印,那么你可以使用“中止”或“退出”。 但是,当在救援模块中使用“中止”时,将终止该任务并打印整个错误(即使不使用–trace)。 所以“退出”是我使用的。