答えて
違いがあり、クラスに依存します。例えばFile
オブジェクトの場合、
File.open("foo.txt", "wb") do |f|
f.write("x")
end
ブロックが終了すると、ファイルハンドルは自動的に閉じられます。しかし、これは慣用法にすぎません。一般に、クラスはセマンティクスを定義し、バリアントにブロックを提供するかどうかを選択します。
x = SomeClass.new
x.some_method
この最初は(引数なしでinitialize
を呼び出す)SomeClass
のインスタンスを作成します。次に、そのインスタンスのメソッドsome_method
を呼び出します。
SomeClass.new do |x|
x.some_method
end
これは、引数としてブロックでinitialize
を呼び出し、SomeClass
のインスタンスを作成します。そのブロックは1つの引数をとり、その引数にsome_method
を呼び出します。どのくらいの頻度でブロックが呼び出されるか、どのくらいの頻度で呼び出されるかは引数SomeClass
のinitializeメソッドによって決まります。 some_creation_method
は、SomeClass
インスタンスを作成し、ブロックにそれを得た後、ブロックが終了した後、そのインスタンスで使用されるすべてのリソースを解放するように、多くの場合、パターン
SomeClass.some_creation_method do |x|
x.some_method
end
が、それは例えば(、可能性が使用されている
ファイルハンドルを閉じる、一時ファイルを削除するなど)。これはFile.open
の機能です。問題のクラスはブロックが新たに作成されたクラスにclass_eval
EDになるだろう文字通りClass
ある場合には
、すなわち
c = Class.new do
some_code
end
ここ
c = Class.new
c.class_eval do
some_code
end
と同等ですその2つが同等でないことを示す簡単な例です。あなたのクラスのinitialize
メソッドが末尾にyield(self)
と呼ばれている場合に限り、それらは同等になります。 2番目の例では
class MyClass
def initialize(name)
@name = name
end
def say_hi
puts "Hi, I am #{@name}"
end
end
x = MyClass.new("Bob")
x.say_hi
#=> Hi, I am Bob
MyClass.new("Jim") do |x|
x.say_hi
end
#=> (nothing prints out)
、私はnew
にブロックを渡すが、私のinitialize
方法はブロックで何もしていないので、ブロックの内容が実行されることはありません。
- 1. MongoDBオブジェクトインスタンス
- 2. @Mockオブジェクトインスタンスは
- 3. App Engineのオブジェクトインスタンス
- 4. ユニティC#オブジェクトインスタンス=ヌル
- 5. 戻りオブジェクトインスタンス
- 6. ビジュアルスタジオとオブジェクトインスタンスのバグ
- 7. JNIとC++のオブジェクトインスタンス
- 8. 静的クラスのオブジェクトインスタンス
- 9. HtmlHelperからオブジェクトインスタンスを取得
- 10. field.getおよびオブジェクトインスタンス名
- 11. テスト新しいオブジェクトインスタンス(ジャスミン)
- 12. フラスコ - オブジェクトインスタンスを維持する
- 13. オブジェクトインスタンスをウィジェットインスタンスにバインドする
- 14. オブジェクト割り当てとオブジェクトインスタンス
- 15. SQLite:オブジェクトインスタンスの永続ストレージ
- 16. javascript関数デフォルトプロトタイプ対オブジェクトインスタンス
- 17. Codeigniterはインクルードクラスのオブジェクトインスタンスにアクセスします
- 18. オブジェクトインスタンスを知らないFuncを渡す
- 19. NumPy配列にオブジェクトインスタンスを埋め込む?
- 20. Javaテスト:オブジェクトインスタンス化のカウント方法
- 21. NodeJSオブジェクトインスタンス - クラスまたは関数
- 22. オブジェクトインスタンスの参照を返します。
- 23. 複数のインターフェイスとオブジェクトインスタンスの実装.Net
- 24. Asp.net MVC4、C#オブジェクトインスタンスを作成します。
- 25. ArrayListに一意のオブジェクトインスタンスを追加
- 26. C++オブジェクトインスタンスをPython関数に渡す
- 27. Pythonでオブジェクトインスタンスのコピーを作成する
- 28. Javaのオブジェクトインスタンス化イベントを聴く方法
- 29. 静的クロージャへのオブジェクトインスタンスのバインド
- 30. オブジェクトインスタンスの比較を超えて
あなたが 'Class.new'と言うとき、あなたは文字通り' Class.new'を意味するのですか、または実際のクラスのプレースホルダーとして 'Class'を使用していますか? – sepp2k
私は実際のクラスを意味します。たとえば、File.open() – adaxa