gpt4 book ai didi

Ruby:为了方便定义类时是 "initialize"?

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:16 25 4
gpt4 key购买 nike

我是编程新手,正在尝试弄清楚创建类时“初始化”的目的。

这是一个例子:

class Person
def initialize(name)
@name = name
@pet = nil
@home = 'NYC'
end
end

所以初始化就是创建一堆属性我直接说Person.name就可以拉出来了和 Person.petPerson.home正确的? “初始化”只是为了将一堆变量压缩到一个地方吗?我这样做会完成同样的事情吗:

class Person     
pet = nil
home = 'NYC'
#not so sure how to replicate the @name here.
end

我不能使用 Person.pet 访问这些值吗?和 Person.home和我在第一个代码中的方式一样吗?

最佳答案

这在 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 的方法中,因此此初始化需要在 some 方法中进行。 initialize 只是在您的实例首次创建时自动调用的方法的方便名称。

关于Ruby:为了方便定义类时是 "initialize"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com