2012-11-24 40 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 !'也會消失。 –