我正在学习新的Ruby语言,并且为什么必须初始化所有变量有点困惑。
我认为attr_accessor
方法会涵盖这一点。这两者似乎都是多余的。 attr_accessor
不假设变量是全局的吗?
非常感谢任何帮助解释这一点。
答案 0 :(得分:1)
您无需初始化任何内容。
如果您考虑“初始化”方法:
class People
attr_accessor :name,:age,:sex
def initialize(name,age,sex)
@name = name
@sex = sex
@age = age
end
end
这是您在创建课程和整理应用时选择的构造。当您为人员initialize
调用new
方法时,将执行此方法(People.new
)。
attr_accessor
为您提供了一个带有元编程的setter和getter,这意味着您无需键入大量代码。
下面是一个getter方法的示例,通常称为“reader”,优雅地替换为attr_reader
:
def name
@name = name
end
相应的setter方法,也称为“writer”,使用attr_writer
:
def name=(name)
@name = name
end
您可以使用attr_accessor
使用setter和getter。也许我离题了,但我想解释这个概念,因为我觉得它很难理解。
简短的回答是,如果你不想,你不需要初始化任何东西。
答案 1 :(得分:0)
您是指在类中定义的实例变量吗?
如果是这样,在def initialize
中定义它们可确保使用适当的变量创建类的每个对象。
attr_accessor为每个变量添加读/写方法。
def initialize
不会自动添加读/写方法,因为并非所有变量都应该具有它们(例如,id
可能具有读取方法,但可能不是写入方法)。