2013-09-24 61 views
1

.clear元命令確切地說.break元命令相同,還是它的變體?我知道它們都可以用來在不退出REPL的情況下跳出...提示(表示您還沒有完成您的命令),可以通過點擊CTRL+C來完成。但是.clear.break之間有什麼根本區別嗎?Node.js中的.clear元命令REPL

我已經在node.js REPL中的很多地方看過,.clear元命令是用來清除內存中可能存在的任何變量或閉包,而無需重新啓動REPL。

是否可以聲明變量,運行.clear命令並再次調用該變量,發現它爲空/未聲明?在我使用.clear命令時,我沒有發現這個工作。

回答

6

.break.clear命令的行爲有所不同,具體取決於您是從node命令啓動REPL還是使用repl.start()

使用node命令時,.clear只是.break的別名。但是,如果您從repl.start()開始REPL,則.clear將清除您所期望的本地上下文,並且.break的行爲如上所述。

這是.help看起來像一個REPL例如,從node開始:

.break Sometimes you get stuck, this gets you out 
.clear Alias for .break 
.exit Exit the repl 
.help Show repl options 
.load Load JS from a file into the REPL session 
.save Save all evaluated commands in this REPL session to a file 

這是什麼樣子的程序啓動時:

.break Sometimes you get stuck, this gets you out 
.clear Break, and also clear the local context 
.exit Exit the repl 
.help Show repl options 
.load Load JS from a file into the REPL session 
.save Save all evaluated commands in this REPL session to a file 

在REPL使用.clear開始repl.start()也會顯示:

Clearing context... 

這裏的編程方式使用REPL的例子:

var repl = require('repl'); 
var str = 'We can pass variables into a context.'; 

repl.start().context.str2 = str; 

在此之後,我們有一個CLI開放。如果我們輸入str2,那麼您將得到str的內容。如果清除上下文,則str2將不再存在於上下文中。

+0

真是個好回答!這麼徹底! :) – shmuli

+0

你介意給我提供一個如何以編程方式啓動REPL的例子,這樣我就可以測試這個了嗎?謝謝! – shmuli

+0

只是想通了。但是,謝謝!我感謝你的帖子。 :) – shmuli

0

Thanks @hexacyanide for your answer!

這些是兩個截圖。

在第一個屏幕截圖中,REPL以編程方式實例化(通過運行repltest.js腳本),因此.clear元命令將清除內存中的變量。當腳本實例化REPL時,您還可以看到.help命令對.clear返回不同的行爲。

但在第二個屏幕截圖中,.clear有不同的行爲。這裏REPL直接通過命令實例化(只需通過運行CMD節點)。在這種情況下,變量不會從內存中清除,並且.help命令僅告訴我們.clear.break的別名。再次

instantiated programmatically instantiated via command

感謝六氰化物澄清這一點。