我是编程的新手,正在努力找出创建课程时“初始化”的目的。
以下是一个例子:
class Person
def initialize(name)
@name = name
@pet = nil
@home = 'NYC'
end
end
初始化是通过说Person.name
和Person.pet
和Person.home
来创建一系列我可以直接提取的属性吗? “初始化”只是为了将一堆变量压缩到一个地方吗?我会做同样的事情:
class Person
pet = nil
home = 'NYC'
#not so sure how to replicate the @name here.
end
我无法使用Person.pet
和Person.home
以与第一个代码相同的方式访问值吗?
答案 0 :(得分:4)
这在Ruby中有点棘手(与Java相反),因为类和类实例都是运行时的实际对象。因此,类有自己的一组变量,该类的每个实例也都有自己的变量集(与类的变量不同)。
当你说
时class Person
pet = nil
end
您正在设置一个变量pet,它只对名为Person
的类对象是本地的。
操纵类的实例变量的方法是使用方法中的变量:
class Person
def initialize
pet = nil
end
end
这里,pet引用Person
的给定实例的局部变量。当然,这个pet变量在定义时非常无用,因为它只是一个在initialize
函数完成后消失的局部变量。使该变量在实例的生命周期中持久存在的方法是使其成为实例变量,您可以通过在其前面添加@
来实现。因此,我们到达您的第一次初始化:
class Person
def initialize
@pet = nil
# And so on
end
end
那么,为什么你需要initialize
。由于设置Person
实例的实例变量的唯一方法是在Person
的方法中,因此初始化需要在某些方法中。 initialize
只是在首次创建实例时自动调用的方法的便捷名称。
答案 1 :(得分:3)
Initialize是一种通常称为对象构造函数的方法。它在您调用Person.new("Bob")
时使用,它将为您提供该Person
个对象的实例。您在initialize中的变量之前看到的@符号使变量成为一个实例变量,这意味着只有拥有该对象的实例后才会访问该变量,并且该变量将在该实例的生命周期内保留。
例如
person = Person.new("Bob")
person.name #Will output Bob
person.home #Will output NYC
类是对象并执行此操作:
class Person
pet = nil
home = 'NYC'
end
只是创建局部变量pet和home,并且不在类的范围内。这意味着调用Person.pet
和Person.home
只会给您一个错误。我建议对面向对象编程(OOP)进行一些阅读,如果你还有其他问题请将它们放入stackoverflow:D