2013-09-24 31 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

感谢六氰化物澄清这一点。