初期化メソッドがクラス定義に含まれている場合は、オブジェクトを明示的に初期化する必要がありますか?ruby call initializeメソッドは自動的に行われますか?
答えて
いいえ、Rubyはinitialize
を自動的に呼び出しません。
Class#new
のデフォルトの実装では、ビットのようになります:[。あなたはobj.send(:initialize, *args, &block)
を使用する必要があるので、実際には、initialize
はデフォルトでprivate
ある]
class Class
def new(*args, &block)
obj = allocate
obj.initialize(*args, &block)
obj
end
end
ので、Class#new
のデフォルトの実装はinitialize
と呼ばれますが、そうでない実装ではオーバーライドまたは上書きすることは可能です(極端に愚かですが)。
だからinitialize
を呼び出すのはRubyで、それはClass#new
です。 Class#new
はRubyの不可欠な部分ですが、それは髪の毛を分割していると考えるかもしれませんが、ここで重要なのは言語魔法ではないということです。これは他の方法と同様の方法で、他の方法と同様に、完全に異なる処理を行うために上書きまたは上書きすることができます。
new
を使用してオブジェクトを作成する代わりに、手動でallocate
を使用する場合は、initialize
も呼び出されません。
はです。initialize
を呼び出さずにオブジェクトを作成する場合があります。例えば。 dup
またはclone
を入力すると、initialize
の代わりにinitialize_dup
とinitialize_clone
が呼び出されます(どちらもinitialize_copy
となります)。また、例えばMarshal
を介してオブジェクトを逆シリアル化する場合、その内部状態はinitialize
の代わりに直接再構成されます(つまり、インスタンス変数は反映されます)。
はい、これはnew
メソッドから呼び出され、オブジェクトの作成に使用されます。
「明示的」という定義に依存します。
これは持っているでしょう:暗黙の初期化のフォームを作成、使用できるインスタンスを生成ファクトリメソッドがあるいくつかのケースで
object = MyClass.new(...)
:通常は、引数が指定されていない場合でも、する必要がありMyObject.new
を内部的に呼び出す効果。これらは奇妙に見えるが、単にメソッド呼び出している可能性があるとして、
object = MyClass(...)
object = MyClass[...]
効果は同じである:
は次のように、かなり珍しいメソッドのシグネチャを持っているいくつかのライブラリがあります。
- 1. Petapocoの開閉は自動的に行われますか?
- 2. pythonのガベージコレクションは自動的に行われますか?
- 3. ruby restartスクリプトは自動的に実行が終了すると自動的に実行されます
- 4. Express 401のリダイレクトは自動的に行われません
- 5. C#:DataGridViewのプロパティの変更は自動的に行われますか?
- 6. Rubyメソッドの引数 - 真理値を自動的に変更できますか?
- 7. JQuery関数は自動的に自動実行/イベントが自動的にトリガされますか?
- 8. ToolTipManager.sharedInstance.registerComponent(tree)が自動的に行われないのはなぜですか?
- 9. 自動的にではなくfxmlコントローラの外部でinitialize()メソッドを呼び出す
- 10. ループを再帰的メソッドに自動的にリファクタリングしますか?
- 11. 関数オーバーライドはコンパイラによって自動的に行われるか
- 12. スネークゲームが自動的に失われる
- 13. java paint()は自動的に実行されますか?
- 14. AWS信託アドバイザーは自動的に実行されますか?
- 15. InitializeメソッドからHttpStatusCode.BadRequestを返します。
- 16. Longlistselectorは自動的に自動更新されますか?
- 17. 自動的にCSSスプライシングを行うライブラリはありますか?
- 18. Rubyがto_sを自動的に実行しないのはなぜですか?
- 19. Rubyモジュールで#initializeをオーバーライドすることはできますか?
- 20. リストビュー内のチェックボックススクロール時のチェックとアンチェックが自動的に行われます
- 21. [bytes]はフリーを使わずに自動的にメモリを解放しますか?
- 22. 静的メソッドとRubyの動的なラムダ
- 23. は自動的に組み合わせ/バンドルEFの移行(S)
- 24. モデルに対するDjangoの許可はどのように自動的に行われますか?
- 25. 自動実行メソッド
- 26. コールスーパークラスのメソッドが自動的に
- 27. Azure BizSparkの代金は自動的に支払われますか
- 28. RecognitionListener.onError()は自動的にSpeechRecognizer.cancel()を行いますか?
- 29. CronJobは自動的に実行されませんDrupal7
- 30. 'self'にメッセージを送信すると、initializeメソッドが呼び出されますか?
派生クラスがその親の 'initialize'とどのようにやりとりするのかを言いたいですか? –
@Jorge「上書き」とはどういう意味ですか?これを少しはっきりさせることができますか? –
@Priti:Rubyには*オープンクラス*があり、既存のメソッドを新しい実装で上書きすることができます。 –