How to cancel evaluating a required Ruby file? (a.k.a. top-level return)

后端 未结 4 1001
不知归路
不知归路 2021-01-17 19:14

file1 requires file2, and I want to be able to cancel evaluating file2 under certain conditions without exiting the whole process.

4条回答
  •  半阙折子戏
    2021-01-17 19:30

    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:

    if condition
      return
    end
    
    while condition
      # ...
      return
    end
    
    begin
      # ...
      return
    rescue
      # ...
      return
    ensure
      # ...
      return
    end
    

    And it would not exit the required file in the following statements:

    class Foo
      return # LocalJumpError
    end
    
    def foo
      return # returns from method, not from required file
    end
    
    proc do
      return # LocalJumpError
    end
    
    x = -> { return } # returns as from lambda, not from required file
    

    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.

提交回复
热议问题