以下是示例代码:
class User
attr_accessor :name, :email
def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end
....
end
当我这样做时
example = User.new
它会创建一个空用户,我可以通过
指定其名称和电子邮件example.name = "something"
example.email = "something"
我的问题是,为什么这件事有效?计算机如何知道example.name表示类中的@name变量?我假设名称和:名称不同,在代码中我们没有明确告诉计算机example.name等同于:name symbol。
答案 0 :(得分:5)
attr_accessor
做的是它创建了几个方法,一个getter和一个setter。它使用您传递的符号来构造方法和实例变量的名称。看,这段代码:
class User
attr_accessor :name
end
相当于此代码
class User
def name
@name
end
def name=(val)
@name = val
end
end
答案 1 :(得分:5)
attr_accessor :field
与调用attr_reader :field
和attr_writer :field
相同。那些反过来大致等于:
def field
@field
end
def field=(value)
@field = value
end
欢迎来到元编程的魔力。 ;)