18

有没有办法从指定的行开始,比如 goto 语句?

4

4 回答 4

28

首先,它是声明,而不是命令。其次,参见ruby​​-goto。三、注意

类别:图书馆/邪恶

于 2009-10-28T02:37:13.070 回答
4

有 ruby​​ 命令行开关-x

-x[directory] ​​告诉 Ruby 脚本嵌入在消息中。
                领先的垃圾将被丢弃,直到第一个
                以。。开始 ”#!” 并包含字符串“ruby”。任何
                将应用该行上有意义的开关。结尾
                必须使用 EOF、^D (control-D)、
                ^Z (control-Z),或保留字 __END__。如果直接
                指定了 tory 名称,Ruby 将切换到该目录
                在执行脚本之前。

顺便说一句,我很确定 ruby​​-goto 是,嗯,一个笑话。我不相信下载链接曾经有效。还是我只是应该向人们指出它并保持安静?我从来都不知道...

在宣布 ruby​​-goto 之后,我喜欢 Ryan 的下一行:

请继续关注下一个邪恶模块... ruby​​-malloc!祝你今天过得愉快。

瑞恩显然是个天才。

于 2009-10-28T02:45:22.273 回答
3

goto 库仍在我们身边:D https://rubygems.org/gems/goto/versions/0

为后代保存整个宝石:

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
于 2016-01-09T20:30:47.297 回答
2

我不这么认为(而且,尽管如此,它不应该如此)。

但是goto,如果您真的很受虐,则可以使用一个模块。

于 2009-10-28T02:39:20.190 回答