在阅读了http://www.seejohncode.com/2012/03/16/ruby-class-allocate/并更深入地研究了分配方法:http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-allocate之后,我变得非常好奇。
Ruby的构建方式不需要为对象手动分配或释放空间,但我们被赋予了这样做的能力。为什么?
手动分配对象在Ruby中有什么用处?我读的这篇文章展示了一个自定义的初始化方法,但它的用途如此有限吗?
在阅读了http://www.seejohncode.com/2012/03/16/ruby-class-allocate/并更深入地研究了分配方法:http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-allocate之后,我变得非常好奇。
Ruby的构建方式不需要为对象手动分配或释放空间,但我们被赋予了这样做的能力。为什么?
手动分配对象在Ruby中有什么用处?我读的这篇文章展示了一个自定义的初始化方法,但它的用途如此有限吗?
1条答案
按热度按时间6tqwzwtp1#
allocate
存在的主要原因是允许您为对象构建自定义构造函数。正如您所链接的文章所提到的,您可以想象SomeClass.new
方法在默认情况下执行类似以下操作:不管文档怎么说,
allocate
方法的存在与其说是关于内存管理,不如说是关于提供对对象创建生命周期的一些更细粒度的控制。大多数情况下,您不需要此功能,但它对于某些边缘情况很有用。例如,在Newman邮件框架中,我使用此技术为TestMailer对象实现了一个伪构造函数;为了实现API兼容性,它实现了
new
方法,但实际上返回了一个示例,无论它被调用了多少次:除了如上所示重新定义
new
之外,我没有见过很多其他用例(尽管我想一些奇怪的序列化东西也使用这个特性)。但考虑到这一点,值得指出的是,无论您是否需要经常使用这些扩展点,Ruby都会始终如一地提供此类扩展点。Robert Klemme有一篇很棒的文章,名为The Complete Class,如果您想了解这个设计概念在Ruby中的应用程度,我强烈建议您阅读这篇文章:-)