为什么我必须在类中初始化变量?

时间:2014-11-19 20:09:39

标签: ruby initialization attr-accessor

我正在学习新的Ruby语言,并且为什么必须初始化所有变量有点困惑。

我认为attr_accessor方法会涵盖这一点。这两者似乎都是多余的。 attr_accessor不假设变量是全局的吗?

非常感谢任何帮助解释这一点。

2 个答案:

答案 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可能具有读取方法,但可能不是写入方法)。