2016-03-26 4 views
0

Rubyでは、attr_accessorのキーは単にgetter/setterメソッドを作成することを理解します。例えば 、これはNodeクラスのために、ケースだったら ノードクラスのAttr_accessor

def data=(value) 
    @data = value 
end 

def data 
    @data 
end 

は、なぜ私はinitializeメソッドを作成する必要があります

attr_accessor :data

例:

def initialize(data, next_node) 
@data = data; 
@next_node = next_node; 

は、私はちょうどatt_accessor :data, next_nodeを書き込めませんでしたか? initialize方法で

+0

これは、あなたのクラスへのインターフェイス、つまりインスタンス化する必要があるデータを定義するためにコンストラクタが使用されているという、意見の分かれた回答につながる可能性があります。あなただけが、実際に誰がどのように働いているのかに基づいて、そのコンストラクタが必要とするものを定義することができます。 – Anthony

答えて

0

あなたが書くことができる:なし

node = Node.new('foo', node) 

(とのみattr_accessor付き)あなたが記述する必要があります。

node = Node.new 
node.data = 'foo' 
node.next_node = node 

をあなたの質問に答えるために:initializeの必要はありませんメソッドを使用する方が便利でしょう。

+2

それは単なる便利ではありません、間違いなくより正確です。後者の場合、オブジェクトはインスタンス化されると無意味です。しかし、オブジェクトは完全に初期化され、使用される準備ができていなければなりません。後者の場合、 'Node'はそれ自身の不変量を満たすいくつかのランダムな他のコードに依存しています。 –

関連する問題