让我们来看一个普通的 Ruby 类:
class Person
attr_accessor :name
def initialize name
@name = name
end
end
bob = Person.new("bob")
我的问题是关于初始化的本质。事实上,
new
显然是一个类方法,但我认为initialize
是一个实例方法(不是类方法),它在调用类方法new
创建实例时被调用。我的理解正确吗?或者有人能够提供新的见解吗?我已经做了一些谷歌搜索,但没有找到任何明确的答案。
def self.new
,则不会调用初始化。 - max pleanernew
方法而被称为结果?还是它本身就是new
方法? - Andrew Kimname
和name=
)。 - Cary Swovelandnew
的语义:obj = allocate; obj.send(:initialize, *args, &block); return obj
这里唯一“独特”的方法是allocate
,它的语义无法在 Ruby 中表达:它从对象内存中分配一个空对象,并将其类指针设置为self
- 这两个事情都无法从 Ruby 中解释。但即便如此,它仍然是一个普通的方法,可以像任何其他方法一样被覆盖和重写...只是不能用 Ruby 编写。 - Jörg W Mittag