Is there goto statement in Ruby?

后端 未结 4 2039
谎友^
谎友^ 2020-12-07 00:52

Is there a way to start at a specified line, like a goto statement?

相关标签:
4条回答
  • 2020-12-07 01:05

    First, it would be statement, not a command. Second, see ruby-goto. Third, note

    Category: Library/Evil

    0 讨论(0)
  • 2020-12-07 01:10

    I don't believe so (and, by all that's holy, it shouldn't).

    But there's a goto module for it if you're feeling really masochistic.

    0 讨论(0)
  • 2020-12-07 01:18

    The goto lib is still with us :D https://rubygems.org/gems/goto/versions/0

    Conserving the entire gem for posterity:

    STACK = []
    
    class Label
      attr_accessor :name;
      attr_accessor :block;
    
      def initialize(name, block);
        @name  = name
        @block = block
      end
    
      def ==(sym)
        @name == sym
      end
    end
    
    class Goto < Exception;
      attr_accessor :label
      def initialize(label); @label = label; end
    end
    
    def label(sym, &block)
      STACK.last << Label.new(sym, block)
    end
    
    def frame_start
      STACK << []
    end
    
    def frame_end
      frame = STACK.pop
      idx   = 0
    
      begin
        for i in (idx...frame.size)
          frame[i].block.call if frame[i].block
        end
      rescue Goto => g
        idx = frame.index(g.label)
        retry
      end
    end
    
    def goto(label)
      raise Goto.new(label)
    end
    
    0 讨论(0)
  • 2020-12-07 01:20

    There is the ruby command line switch -x.

     -x[directory]  Tells Ruby that the script is embedded in a message.
                    Leading garbage will be discarded until the first that
                    starts with “#!” and contains the string, “ruby”.  Any
                    meaningful switches on that line will applied.  The end of
                    script must be specified with either EOF, ^D (control-D),
                    ^Z (control-Z), or reserved word __END__.  If the direc‐
                    tory name is specified, Ruby will switch to that directory
                    before executing script.
    

    BTW, I'm pretty sure ruby-goto was, umm, a joke. I don't believe the download link has ever worked. Or am I just supposed to point people to it and keep quiet? I never know...

    I liked Ryan's next line after announcing ruby-goto:

    Stay tuned for the next evil module... ruby-malloc! Have a nice day.

    Ryan is clearly a genius.

    0 讨论(0)
提交回复
热议问题