One*_*ero 0 ruby ruby-on-rails
可能重复:
Ruby中的attr_accessor是什么?
这是示例代码:
class User
attr_accessor :name, :email
def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end
....
end
Run Code Online (Sandbox Code Playgroud)
当我做
example = User.new
Run Code Online (Sandbox Code Playgroud)
它创建一个空的用户,我可以分配其名称和电子邮件
example.name = "something"
example.email = "something"
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么这件事有效?计算机如何知道example.name表示类中的@name变量?我假设名称和:名称不同,在代码中我们没有明确告诉计算机example.name等同于:name symbol.
什么attr_accessor做的是它创造了两个方法,一个getter和一个setter.它使用您传递的符号来构造方法和实例变量的名称.看,这段代码:
class User
attr_accessor :name
end
Run Code Online (Sandbox Code Playgroud)
相当于这段代码
class User
def name
@name
end
def name=(val)
@name = val
end
end
Run Code Online (Sandbox Code Playgroud)
attr_accessor :field与呼叫attr_reader :field和相同attr_writer :field。依次大致等于:
def field
@field
end
def field=(value)
@field = value
end
Run Code Online (Sandbox Code Playgroud)
欢迎使用元编程的魔力。;)
| 归档时间: |
|
| 查看次数: |
5064 次 |
| 最近记录: |