Ruby中调用类方法是否等同于创建实例?以Time类为例
Ruby中“创建实例”与类方法调用的区别
先明确两个核心概念:
- 创建实例:生成某个类的具体对象,这个对象拥有该类定义的属性和实例方法。
- 类方法:直接绑定在类本身的方法,调用时不需要先创建实例(但有些类方法的作用就是创建实例)。
关于你的两段代码
示例1:明确创建实例
now = Time.now # this makes instance
Time.now是Time类的类方法,它的功能就是创建并返回一个Time类的实例,然后把这个实例赋值给了now变量,所以这里确实创建了实例。
示例2:既创建了实例,也调用了类方法+实例方法
if Time.now.strftime('%Y/%m/%d') > '2022/12/19' # blabla end
这段代码的执行过程可以拆解成两步:
- 调用
Time.now:和示例1一样,这个类方法会创建一个Time实例,只不过这个实例没有被赋值给任何变量,是个临时对象。 - 调用
.strftime('%Y/%m/%d'):这是调用刚才生成的那个临时Time实例的实例方法,用来格式化时间字符串。
所以结论是:示例2里不仅调用了类方法,也创建了Time实例——Time.now的本质就是创建实例,不管你有没有把实例存起来,只要调用它就会生成实例。之后的strftime是基于这个实例的操作,用完这个临时实例后,Ruby的垃圾回收机制会自动清理它。
内容的提问来源于stack exchange,提问作者nicecoding521235
相关产品推荐
相关产品推荐

