Ruby に関する本を何冊か読んだことがあり、Proc の作成方法と呼び出し方法を理解しています。しかし、これらの本の例は不自然で些細なものです。同じことを行うために従来の方法を使用するのではなく、 Proc を使用することが実際に役立つのはいつでしょうか? 多分誰かが重要な例を投稿できますか?
2 に答える
Ruby では、Procは、後で実行するコードをオブジェクトに保存するための優れた方法です。ブロックはオブジェクトではありませんが、簡単に Proc に変換できます。プロシージャは多くのことに役立ちます。プロシージャは、コールバックの実装によく使用されます。最近、システムのシミュレーションを書いているときに Procs を使用しました。シミュレーションでメソッドを呼び出すたびにstep
、さまざまなことが起こるようにしたかったのです。シミュレーション オブジェクト自体にこれらの詳細を知らせたくありませんでした。定義したコールバックを呼び出すようにしたかっただけです。それぞれがメソッドを持つ一連のカスタム クラスまたはオブジェクトを定義することで同じことを実現できましたが、call
Procs を使用した方が明らかに簡単でした。
class X
def initialize
@step_callbacks = []
end
def every_step(&proc)
# If you print proc.class here, you can see it is a Proc
@step_callbacks << proc
end
def step
# ...perform the step...
@step_callbacks.each do |proc|
proc.call
end
end
end
x = X.new
x.every_step do
# check some assertions about the state of the simulation
end
x.every_step do
# update a related simulation
end
x.step
x.step
この例が不自然だと思わないでほしい。私は仕事で仕事を終わらせるためにそれを使用しました。また、ここでわかるように、同じパターンを使用して、Minecraft ボットで受信したパケットを処理しました。
コールバックは、あるオブジェクトに何らかのコードを呼び出させたいが、呼び出しているコードを正確に知りたくない場合に非常に便利です。プロシージャは、コールバックを実装する簡単な方法です。