【问题标题】:What does the "_" (underscore) symbol in Node.js REPL mean?Node.js REPL 中的“_”(下划线)符号是什么意思?
【发布时间】:2017-09-25 22:01:41
【问题描述】:

当我注意到这件事时,我正在用一些代码玩 Node.js:

> 'hello world'.padEnd(20);
'hello world         '
> 'hello world'.padEnd(20, _);
'hello worldhello wor'

下划线符号在这里有什么作用?

> _
'hello worldhello wor'

【问题讨论】:

标签: javascript node.js


【解决方案1】:

_ 在节点控制台返回最后一个表达式的结果。

> 1 + 2
3
> _
3

【讨论】:

  • 哇,真是出乎意料的行为。
  • 在 REPL(交互式控制台)中发生,它是 fully documented。在普通代码中,下划线只是另一个变量标识符。
  • @canon,我曾经有一位教授,在用方程式填满一块板后,说“很明显-”并开始填写第二块板。我举起手。 “Goldman 博士,你确定这很明显吗?”这阻止了他。他沉默地盯着自己的作品看了好一分钟。 “是的,”他总结道。 “很明显。”当我在侧边栏看到这个问题时,我想,“这可能意味着最后一个表达式的结果。”
  • 这并不出人意料——事实上,它甚至不是 node.js 甚至 JavaScript 独有的。它在 Python 和 Ruby 交互环境中,可能还有更多我没用过的语言。
  • “这并不出人意料” - 所有的印记都出人意料。例如,如果改为__previousResult__,则永远不会问这个问题。
【解决方案2】:

_ 符号返回 REPL 节点控制台中最后记录的表达式的结果:

> 2 * 2
4
> _
4

正如documentation 中所写,在 6.x 及更高版本的节点中,可以通过将值显式设置为 _ 来禁用此行为:

> [ 'a', 'b', 'c' ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
Expression assignment to _ now disabled.
4
> 1 + 1
2
> _
4

但在旧版本中,该功能不起作用:

> [ 'a', 'b', 'c' ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
4
> 1 + 1
2
> _
2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2017-09-25
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多