在这里,您看到我们有一个名为"属性"我们在课堂上初始化它,所以问题是名称和衬衫属性来自哪里,因为我们没有在课堂上初始化和定义它们?
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 :(得分:1)
在Ruby中,如果正确定义,最后一个参数会自动解释为哈希,并允许您在没有{}
的情况下传递它。由于只有一个参数,它也被认为是最后一个参数:
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"}>
答案 1 :(得分:0)
@attributes={:name=>"go", :size=>"42"}
这一行告诉你的是你有一个名为@attributes
的实例变量,它的值是一个哈希值,{:name=>"go", :size=>"42"}
用两个简单的变量来区分
class A
def initialize(dogs, cats)
@dogs = dogs
@cats = cats
end
end
A.new(4, 5)
=> #<A:0x007f96830e3c80 @dogs=4, @cats=5>
答案 2 :(得分:0)
指令attr_accessor :attribute
定义了2个方法
def attribute; @attribute;end
和
def attribute=(value); @attribute=value;end
但是当你打字的时候
store = Shirt.new(name: "go", size: "42")
您定义了一个哈希并将其传递给属性 s param:
init_values={name: "go", size: "42"}
store = Shirt.new(init_values)
在initialize方法中,attributes
param被视为哈希并传递给@attribute s 实例变量
尝试检查
store = Shirt.new(["go","42"])
store = Shirt.new({})
PS。
尝试使用attr_accessor :attributes
,然后您就可以使用
store.attributes
store.attributes=