18

gotoステートメントのように、指定された行から開始する方法はありますか?

4

4 に答える 4

28

まず、コマンドではなくステートメントになります。次に、ruby-gotoを参照してください。第三に、注意してください

カテゴリ:図書館/悪

于 2009-10-28T02:37:13.070 に答える
4

ruby コマンドラインスイッチがあり-xます。

-x[directory] ​​スクリプトがメッセージに埋め込まれていることを Ruby に伝えます。
                先頭のゴミは最初のゴミまで捨てられます
                「#!」で始まる 文字列「ruby」が含まれています。どれでも
                その行の意味のあるスイッチが適用されます。の終わり
                script は、EOF、^D (control-D)、
                ^Z (control-Z)、または予約語 __END__。もし直接
                tory name を指定すると、Ruby はそのディレクトリに切り替えます
                スクリプト実行前。

ところで、ruby-goto は冗談だったと思います。ダウンロードリンクが機能したことはないと思います。それとも、人々にそれを指摘して黙っているだけですか?私は決して知りません...

ruby-goto を発表した後の Ryan の次の行が気に入りました。

次の邪悪なモジュールにご期待ください... ruby​​-malloc! 良い1日を。

ライアンは明らかに天才です。

于 2009-10-28T02:45:22.273 に答える
3

goto lib はまだあります: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 に答える