file1
requires file2
, and I want to be able to cancel evaluating file2
under certain conditions without exiting the whole process.
# file1.rb
puts "In file 1"
require 'file2'
puts "Back in file 1"
# file2.rb
puts "In file 2"
# return if some_conditional
puts "Still in file 2"
When running file1
, the output I want to see is:
In file 1
In file 2
Back in file 1
The goal is for Still in file 2
to never print, while Back in file 1
does print. Is there anything I can do in file2
to make this possible?
I can't use exit
/exit!
/abort
here because Back in file 1
will never print. I could use raise
/fail
, but to do that I would have to change file1
and rescue
the failed require
. I'm hoping to find a way that doesn't involve altering file1
.
UPDATE:
A "top-level return" feature has been added.
Lines below
__END__
will not be executed.Is using a method possible ? It will still parse the method but won't get executed. Something like :
I don't know of any official method for breaking out of required files, especially as there are several
require
methods (e.g., bundler monkey patches require)The best solution I could come up with was using rubys throw-catch control flow. I'm not sure conditional you're using to determine if execute should return early, but this should be able to cope with most situations
UPDATE:
A "top-level return" feature has been added.
ORIGINAL:
Commenter matt pointed out that Feature 4840, which would do exactly what I'm asking about, has been in discussion since June 2011. Further, the feature was still being discussed as late as November 2015 in core team meetings regarding new Ruby features.
There are a lot of difficulties involved in designing a feature like this; for a list of the pros and cons, I highly suggest checking out the discussions.
The proposed feature would allow exiting the required file while using any of the the following top-level statements:
And it would not exit the required file in the following statements:
Since the feature remains unimplemented, I have awarded the bounty to steenslag for successfully solving the problem (as originally written) to the letter, if not the spirit.