2009-10-22 13 views
5

昨夜、私は先進的なルビ言語の機能、すなわちContinuations(callcc)とBindingオブジェクトを考えていました。静的型付けされたoo langagesのバックグラウンド(C#、Java、C++)を持っているので、私は上級者を意味するので、最近ルビーを発見しました。実際のバインディングオブジェクトのルビへの使用

私はこれらのlangages機能の実際の使用が何であるか疑問に思っています。私の経験では、静的型付けされたすべての言語ですべてを行うことができましたが、時にはそれほどスマートではありません。私は、Sam Rubyの素敵な記事を読んでいるContinuationの美しさ/興味を考え出したと思う:http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons

まだ、私はBindingオブジェクトで失われている。誰かが実際にバインディングオブジェクトでスマートに行うことができる何かの実例を私に提供することはできますか?

私は長い実行プロセス中に何か問題が起きたときにオブジェクトを初期状態にロールバックすることを考えていましたが、これはBindingオブジェクトで実装できるかどうかわからず、前にオブジェクトを複製することによって処理中に何か問題が生じた場合には、処理して、変更されたオブジェクトをクローンで置き換えます。だから、これは私が考える有効な例ではありません。

ご協力いただきありがとうございます。

答えて

5

を評価したい場合に便利です。

あなたはそれぞれのリターンをスニペット何と一緒にRubyコードのスニペットのリストを検査するためにこれを使用することができます
class Array 
    def debug binding 
    each do |arg| 
     puts "arg = #{eval(arg, binding).inspect}" 
    end 
    end 
end 

user = #<User id:1, username: 'joe', ... 
current_resource = #<Comment id:20, ... 
user.owns?(current_resource) = false 

を出力します

# .. some hairy code you want to debug ... 
['user','current_resource', 'user.owns?(current_resource)'].debug(binding) 

私はそれが非常に便利迅速なデバッグ

私はdebugが実行されたとき、それはevalで使用できるようにdebugが呼び出される範囲をキャプチャするバインディングオブジェクトを使用する必要がありました。おそらくこれを実装した他の方法がありますが、バインディングの使用は簡単で高速です。おそらく、バインディングオブジェクトがどのような有用なものであるかについてもっと良い例があります。

+0

ありがとう!これは正しいです!デバッグ機能の実装は、Bindingオブジェクトの1つの使用方法と思われます。私はこのデバッグ機能がpickaxeブックのバインディングの例として文書化されているかどうか疑問に思っています。 Bindingオブジェクトの他の用途を見ることができますか? –

+0

@dhruvこれはかなり滑らかです。私は私のユーティリティパッケージに、putsv(冗長であればputs)のそばに追加すると思います...ありがとう! – Ryanmt

8

バインドオブジェクトあなたは、私がデバッグハックを実装するためにバインディング・クラスを使用しましたERB templates.

+1

もう少し詳しく教えてください。私はあなたが何を意味するかはわかりません。 –

+2

@SylvainPrat:ERB#resultメソッドは 'Binding'オブジェクトを受け取ります。 'my_template.result(binding)'で直接呼び出されたカーネルメソッド 'binding'を使用するだけで簡単に取得できます - 現在のコンテキストでテンプレート内のRubyコードを実行します) –

1

http://www.seaside.st/を見てください。これはsmalltalk Webアプリケーションフレームワークです。それは広範囲に継続を使用します。それを使用する方法に関する最高の現実の例は、このCMSですhttp://www.cmsbox.com/en/cms

+0

答えをありがとう、しかし私の質問は、継続よりもバインディングオブジェクトについてのより多くの;) –

関連する問題