2012-11-04 4 views
24

私はinitializeメソッドを使う目的の周りに頭を抱えようとしています。 HARTLのチュートリアルでは、彼は例を使用しています。..レールの初期化メソッドは何ですか

def initialize(attributes = {}) 
    @name = attributes[:name] 
    @email = attributes[:email] 
end 

は、属性にインスタンス変数@name@emailの設定初期化、そしてなぜ我々は引数attributes = {}を持っていないので、場合ですか?

答えて

32

Rubyはオブジェクトのコンストラクタとしてinitializeメソッドを使用します。これはRuby言語の一部であり、Railsフレームワークに特有のものではありません。 Classnewクラスレベルのメソッドを呼び出す

@person = Person.new 

そのクラスのタイプを割り当て、そのオブジェクトのinitializeメソッドを呼び出します:

http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-new

次のような新しいオブジェクトがinstanstiateときに呼び出されます

すべてのオブジェクトは、パラメータを受け入れないデフォルトのinitializeメソッドを持っています(あなたはそれを書く必要はありません - あなたはそれを自動的に取得します)。オブジェクトにinitializeメソッドで異なる処理をさせたい場合は、独自のバージョンを定義する必要があります。

この例では、initializeメソッドにハッシュを渡しています。このメソッドを使用して、デフォルト値の@name@emailを設定できます。

あなたはこのようなとしてこれを使用

:初期化子は、属性のデフォルト値を持っている理由は、(attributes = {}がamptyハッシュにデフォルト値を設定します - {}

@person = Person.new({name: 'John Appleseed', email: '[email protected]'}) 

あなたもせずにそれを呼び出すことができるようです引数を渡す。引数を指定しないと、attributesは空のハッシュになるので、@name@emailの値はnilとなります。これらのキーには値が存在しません(:name:email)。

+3

カップル以上の点: 'initialize'を使用するメカニズムは実際にはRubyではなくRubyです。属性のデフォルト値( 'attributes = {}')として空のハッシュを渡すと、ハッシュ 'attributes [:name]#nil'に設定されていないキーにアクセスしようとすると正常にnilを返します。メソッド内の属性にアクセスする 'initialize(attributes)'のように、 'attributes [:something]#error'というエラーがスローされます) – tamersalama

+0

良い点 - それがRubyの一部であり、それは 'new'メソッドとそれが' initialize'を呼び出す方法を説明します。 –

+0

マイケルとtamersalama、情報ありがとう。私は今初期化することを理解しています。 – jason328

関連する問題