在ruby中,我如何检测未使用/未分配的表达式并使用它们执行某些操作:
class Thing
attr_accessor :name
def initialize(name)
@name = name
#if a new instantiation of this class is not assigned to anything
#or used by a calling method, then make a variable called #{name}
#and assign it to this new instantiation
if not assigned_or_used
global_variable_set(name, this)
end
end
def to_s
"Hi from #{name}"
end
end
现在我想在没有明确地将它分配给变量的情况下实例化Thing,而是在实例化时自动为其分配一个变量:
bob = Thing.new("bob")
puts bob
#=> "Hi from bob"
#works ordinarily
Thing.new("fred")
puts fred
#=> "Hi from fred"
#works after implementing the code for instantiation of Thing
#without explicit assignment/use by a method
答案 0 :(得分:2)
是的,我不知道。我可能会误解,但这听起来像是一个非常糟糕的主意(也许你可以提供为什么你想要这样做)的具体例子。
想到的问题:
Thing.new("fred")
)该怎么办?变量会发生什么变化?垃圾收集器会自动(但只是定期)在没有对象存在引用时释放内存。看起来如果你这样做(为所有“事物”未分配创建变量)你将创建内存泄漏,并绕过垃圾收集器的生活目的。您也可能正在与垃圾收集器作斗争 - 这意味着,在您创建对象之后,如果垃圾收集器在此之间运行,并且在创建变量时,您仍然会丢失该对象。