2012-11-24 37 views
4

任何机构都可以告诉我用什么命令清除滑轨控制台中的所有变量?清除滑轨控制台中的所有变量

例如

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

我需要一个命令,可以让所有变量重置为零,无需重新启动rails控制台本身。

任何意见将非常感激。

+0

为什么不只是'重新加载!'? – cih

+0

@cih重新加载!不会重置变量在我的情况下,虽然 –

+0

@Sarun,检查我的sol是否工作,它不是100%准确的答案。但是它是一种解决方法。 – prashantsahni

回答

6
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 
+0

如果他做了任何实例变量,这不是一个命令伙计! – prashantsahni

+0

@prashantsahni,我更新了我的答案。 –

+0

我一直在寻找如何显示我在控制台中声明的所有变量,这对我有帮助。 – 2016-05-29 11:55:48

-1

做一两件事,类型

irb 'another' 

,然后按Ctrl + L键

现在检查变量的值。 它的工作原理。

+2

它不会将变量重置为'nil',它会将irb的范围更改为字符串对象'another'。例如,如果您在'irb'another''后键入'self',则会得到另一个\ n“'。 –

+0

是的,朋友 - 它改变了范围,并创建了一个新的会话;如果你从早期会话中检查局部变量,它会报告'未定义的变量',实例变量的值将为零。我不认为有一个命令可以一次性重置整个会话。像重新加载!在轨道控制台中。 – prashantsahni

+0

好吧,或许值得一提的是,所有rails控制器的助手,比如'app','controller','reload !'也会消失。 –