str.object_id 216470388-6ren">
gpt4 book ai didi

ruby - 我们如何删除一个对象(具有整数标识符)?

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:37 24 4
gpt4 key购买 nike

我想删除一个对象,我不能。这是一个例子:

irb(main):001:0> str = "hello"
"hello"
irb(main):003:0> str.object_id
2164703880
irb(main):004:0> str = nil
nil
irb(main):005:0> str.object_id
4

如您所见,我可以将对象的变量设置为nil(当然它的对象 ID 将为 4)。之后,垃圾收集器将自动删除id为:2164703880的未使用对象。

但是不,我不想那样。我想删除这个对象。

感谢您的任何想法和建议。

最佳答案

您不能在 Ruby 中取消定义局部变量。您可以使用 remove_class_variable、remove_instance_variable 和 remove_const,但不能对局部变量执行此操作。

在您的代码中,您实际上是在删除字符串对象,或者至少垃圾收集器正在删除它。你唯一保留的是一个名为 str 的指针,它指向 nil。但实际的字符串对象将不复存在。

确保变量未定义的一种方法是将它们包装在 Proc 中。当然这有必须创建 Proc 的缺点,而且让 Ruby 执行垃圾收集要容易得多。如果你确实想使用 proc,它会定义它自己的绑定(bind),你可以强制使用局部变量,如下所示:

Proc.new{ |;str| str = "hello"; puts str.object_id }.call
2227691880
=> nil
defined?(str)
=> nil

请记住,Ruby 是一种面向对象的编程语言,因此处理对象内部的变量比担心全局范围的变量更容易。如果您的变量是在函数和对象内部定义的,它们将保留在这些函数和对象的本地,并且在对象被删除后将不复存在。

关于ruby - 我们如何删除一个对象(具有整数标识符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036206/

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