サブルーチンが正しい単語かどうかはわかりません。しかし、前後にジャンプできるコードのチャンクを実行できるかどうか疑問に思っていましたか?
たとえば、3ブロックのコードを持つプログラムが必要な場合
Block1
Block2
Block3
そしてBlock1内でそれは言う
if something == 1
go to Block2
end
これは可能ですか?
ありがとう!
サブルーチンが正しい単語かどうかはわかりません。しかし、前後にジャンプできるコードのチャンクを実行できるかどうか疑問に思っていましたか?
たとえば、3ブロックのコードを持つプログラムが必要な場合
Block1
Block2
Block3
そしてBlock1内でそれは言う
if something == 1
go to Block2
end
これは可能ですか?
ありがとう!
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
Ruby を再コンパイルすることもでき-DSUPPORT_JOKE
ます(この投稿を参照) が、お勧めしません ;-)
この質問も参照してください: Ruby の goto コマンド?
Ruby では、サブルーチンは単にブロックまたはメソッドとして実装されており、オブジェクトにバインドされたブロックに近いものです。しかし、あちこち飛び回ると、サブルーチンではなく COroutine について話している可能性があります。これらは、Ruby ではファイバー で表されます。