2017-04-06 20 views
1

ここでわかるように、「属性」という1つの属性がクラス内で初期化されています。名前とシャツの属性はどこから来ているのですか?そのクラスで初期化したり定義したりしないでください。私はシャツのクラスのこのインスタンスを検査する際ここでこの1つの属性は、ルビクラスの複数の属性を保持していますか?

class Shirt 
    attr_accessor :attribute 
    def initialize(attributes) 
    @attributes = attributes 
    end 
end 

store = Shirt.new(name: "go", size: "42") 

はまた、私はハッシュを取得:

@attributes={:name=>"go", :size=>"42"} 

誰もがそれを説明するのに役立つことができますか?このラインはあなたに言うことを

答えて

0
@attributes={:name=>"go", :size=>"42"} 

{:name=>"go", :size=>"42"}は、2つの単純な変数の代わりに

class A 
    def initialize(dogs, cats) 
    @dogs = dogs 
    @cats = cats 
    end 
end 

A.new(4, 5) 
=> #<A:0x007f96830e3c80 @dogs=4, @cats=5> 
0

との違いを見て、あなたは1つのインスタンス変数が@attributesを命名し、その値がハッシュである持っているということですディレクティブattr_accessor :attributeは2つのメソッドを定義します

def attribute; @attribute;end

def attribute=(value); @attribute=value;end

いますが、 store = Shirt.new(name: "go", size: "42")を入力するときは、ハッシュを定義し、属性のparamに渡します:初期化メソッドで

init_values={name: "go", size: "42"} 
store = Shirt.new(init_values) 

attributes paramはありますハッシュとして扱われ、@属性に渡されるsインスタンス変数

store = Shirt.new(["go","42"]) 
store = Shirt.new({}) 

PSを点検してみてください。

attr_accessor :attributesで試してみて、あなたが正しく定義され、最後の引数は自動的にハッシュであると解釈され、あなたが{}せずにそれを渡すことが許可されている場合はRubyで

store.attributes 
store.attributes= 
1

を使用することができます。一つだけの引数があるので、それはあまりにも最後の引数として考えられている:

store = Shirt.new(name: "go", size: "42") 
#=> #<Shirt:0x000000022275c0 @attribute={:name=>"go", :size=>"42"}> 

は同じです:

store = Shirt.new({name: "go", size: "42"}) 
#=> #<Shirt:0x000000022271d8 @attribute={:name=>"go", :size=>"42"}> 
+0

は助けるあなたをありがとう –

関連する問題