【问题标题】:clear all variables in rails console清除rails控制台中的所有变量
【发布时间】:2012-11-12 12:18:02
【问题描述】:

谁能告诉我用什么命令来清除rails控制台中的所有变量?

例如

1.9.1 :001 > permissions = {:show => true}
 => {:show=>true} 
1.9.1 :001 > foo = "bar"
 => "bar"

我需要一个命令,它可以在不重新启动 rails 控制台本身的情况下将所有变量重置为 nil。

非常感谢任何建议。

【问题讨论】:

  • @cih 重新加载!在我的情况下不会重置变量
  • @Sarun,检查我的 sol 是否有效,它不是 100% 准确的答案。但它是一种解决方法。

标签: ruby-on-rails rails-console


【解决方案1】:
local_variables.each { |e| eval("#{e} = nil") }

local_variables返回当前作用域内所有局部变量的符号列表

a, b = 5, 10
local_variables # => [:b, :a]

使用each,您可以遍历此列表并使用eval 将它们的值分配给nil

您也可以对instance_variablesglobal_variables 执行相同的操作。例如

(local_variables + instance_variables).each { |e| eval("#{e} = nil") }

顺便说一下,如果您要多次使用它,在~/.irbrc 文件中定义这样的方法可能会有所帮助,以便所有 irb 会话都可以访问它(没有在 rails 控制台中对其进行测试)。

class Binding
  def clear
    eval %q{ local_variables.each { |e| eval("#{e} = nil") } }
  end
end

然后,在irb 会话中

a = 5
binding.clear
a # => nil

【讨论】:

  • 如果他做了任何实例变量怎么办,这不是命令老兄!
  • 我正在寻找如何显示我在控制台中声明的所有变量,这对我有帮助。
【解决方案2】:

做一件事,输入

irb 'another'

然后按 ctrl+l

现在检查变量的值。 它有效。

【讨论】:

  • 它不会将变量重置为nil,它会将 irb 的范围更改为字符串对象“另一个”。例如,如果您在irb 'another' 之后键入self,您将得到"another\n"
  • 是的,朋友——它改变了范围,并创建了一个新会话;如果您检查早期会话中的局部变量,它将报告“未定义变量”并且实例变量的值将为零。我认为没有一个命令可以一次性重置整个会话。喜欢重新加载!在 Rails 控制台中。
  • 好吧,也许值得一提的是,appcontrollerreload! 等所有 Rails 控制台的助手也会消失。
猜你喜欢
  • 2015-09-24
  • 2016-03-20
  • 2019-07-23
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多