3

サブルーチンが正しい単語かどうかはわかりません。しかし、前後にジャンプできるコードのチャンクを実行できるかどうか疑問に思っていましたか?

たとえば、3ブロックのコードを持つプログラムが必要な場合

Block1
Block2
Block3

そしてBlock1内でそれは言う

if something == 1
 go to Block2
end

これは可能ですか?

ありがとう!

4

3 に答える 3

3

Ruby には「goto」がありません。通常はメソッド (サブルーチン) を使用します。

def block1
  puts "foo"
end

def block2
  puts "bar"
end

if something == 1
  block1
  block2
end

# => foo
# => bar

「goto」が必要な一般的な理由の 1 つは、状態エンジンを実装することです。Ruby では、単純な case ステートメントを使用して、小さな状態エンジンを簡単に作成できます。

state = :init
loop do
  case state
  when :init
    puts "init"
    state = :working
  when :working
    puts "working"
    state = :done
  when :done
    puts "done"
    break
  end
end

# => init
# => working
# => done
于 2012-10-12T12:09:02.220 に答える
2

Ruby を再コンパイルすることもでき-DSUPPORT_JOKEます(この投稿を参照) が、お勧めしません ;-)

この質問も参照してください: Ruby の goto コマンド?

于 2012-10-12T13:52:07.757 に答える
1

Ruby では、サブルーチンは単にブロックまたはメソッドとして実装されており、オブジェクトにバインドされたブロックに近いものです。しかし、あちこち飛び回ると、サブルーチンではなく COroutine について話している可能性があります。これらは、Ruby ではファイバー で表されます。

于 2012-10-12T14:01:25.043 に答える