【问题标题】:Language construct that corresponds to python del statement in Ruby [duplicate]对应于Ruby中python del语句的语言结构[重复]
【发布时间】:2014-09-05 05:09:18
【问题描述】:

Ruby 中对应于 python del 语句的语言结构是什么。通过其他方式,我可以在 Ruby 中显式释放内存。

【问题讨论】:

  • @delnan 感谢您告诉这些。我不知道del 可以做这么多事情。
  • 另外,请不要将 Ruby 与 Python 进行比较,反之亦然。它们甚至不一样。
  • @JamesMills 即使它们完全不同(在许多领域,至少对我而言,它们似乎并不相同)在语言 Y 中要求语言特征 X 的道德等价物有什么问题?这不像打开的问题“所以我们知道 Ruby 只是 Python,但更糟糕的是。没有办法......”
  • @delnan 因为你用 Ruby 和 Python 标记了它。一些 Pythonista 不一定知道或熟悉 Ruby 的语义,反之亦然。

标签: ruby


【解决方案1】:

在 Python 的语言参考中,del 的作用如下:

删除名称会从本地或本地删除该名称的绑定 全局命名空间。

在 Ruby 中,一旦设置了变量,就无法取消设置。可以将变量设置为 nil,这样就可以进行 GC,但是只要在作用域内,变量就会一直保留在符号表中。

【讨论】:

【解决方案2】:

在Python中对于Ruby有没有对应的del方法?

del 中做了很多不同的事情。在 中,通常首选方法只做一件事,因此有许多方法提供del 在Python 中所做的不同方面。

不幸的是,很难说 究竟 del 在 Python 中做了什么。这是一个很有说服力的quote from the Language Reference

这里没有详细说明,而是一些提示。

  • 要从Array 中删除条目,请使用Array#delete_at
  • 要从Array 中删除切片,请使用Array#slice!
  • 要从Hash 中删除条目,请使用Hash#delete
  • 要删除实例变量,请使用Object#remove_instance_variable
  • 要删除类变量,请使用Module#remove_class_variable
  • 要删除常量,请使用Module#remove_const
  • 对于删除局部变量,Ruby 中没有方法。局部变量在块、方法、类、模块或脚本主体的末尾超出范围,无论如何这些都应该很小,因此通常不需要显式删除局部变量。如果你需要限制一个局部变量的范围,你总是可以将它包装在一个块中:

    # some code here
    -> {
      some_local_var = 'blah'
      # code using some_local_var
    }.()
    # more code here, some_local_var is no longer in scope
    
  • 也没有删除全局变量的方法。全局变量应该只用在快速、简短、一次性的脚本中,这并不重要。

或者,我应该如何释放 Ruby 中的内存空间?

Ruby 具有自动内存管理功能(就像 Python,顺便说一句)。它会为你释放内存。

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2018-08-22
    • 2015-07-26
    相关资源
    最近更新 更多