【问题标题】:What is the javascript `_|_`?什么是 JavaScript `_|_`?
【发布时间】:2017-09-09 12:03:37
【问题描述】:

当我看到这个表达式时,我正在寻找 javascript 中一个问题的解决方案,即将一个字符串解析为其组成名称、运算符和括号:

return accept(")") ? _|_ : e;

_|_ 是什么?那是使用节点的_ 功能吗?我已经查找了文档,但没有找到任何文档。

当我自己尝试使用它时,会发生这种情况:

> 5
5
> true ? _|_ : 0
ReferenceError: _ is not defined
    at eval:1:1
    at eval
    at n.<anonymous>

澄清一下,变量_ 没有在代码中的任何地方定义。

这是在 Node v8.1.3 上运行的,但在 Chrome 原生浏览器 JS 上也可以正常工作。

代码如下:

function tokenise(string) {
  const tokens = string.match( /[a-z]+|\(|\)|[!#$%&*+\-\/<=>@^_.,;]+/gi ) || [];
  const accept = s => s===tokens[0] && tokens.shift() ;
  const unaccept = s => s!==tokens[0] && tokens.shift() ;
  const singles = (e) => ( e = unaccept(")") ) ? [ e, ...brackets() ] : [] ;
  const brackets = (e) => accept("(") ? ( e = brackets(), accept(")") || _|_ , [ e, ...brackets() ] ) : singles() ;
  try      { let e = brackets(); return accept(")") ? _|_ : e ; }
  catch(_) { return null; }
}

【问题讨论】:

    标签: javascript node.js syntax


    【解决方案1】:

    _|_ 在 JavaScript 中没有特殊含义,它只是一个 | (bitwise OR) 表达式,其标识符为 _

    该代码检查调用accept 的结果,如果是真的,则返回| 操作的结果;如果不是,则返回 e 的值。

    这是使用节点的_ 功能吗?

    _ 在 Node 代码中并不特殊。在 REPL(仅)中,它是一个变量,用于接收最近评估的表达式的结果; details here.

    澄清一下,变量_ 没有在代码中的任何地方定义。

    这意味着如果accept(")") 返回一个真值,代码将抛出一个ReferenceError,因为_ 是一个未声明的标识符。如果这就是作者的意图,则根本不需要 | 运算符,但在一个现已删除的答案中,georg 指出他们可能已使用 _|_ 作为表达的尝试bottom 的数学概念(“永远不会成功完成的计算”),其符号是 。在任何情况下,作者似乎都使用它来强制表达式上下文中的异常(因为throw 是一个语句;但有人说可能在某些时候允许它在表达式上下文中)。

    【讨论】:

    • @Xufox:嗯,太糟糕了。我已经添加了他指出的要点。
    【解决方案2】:

    它接受一个变量_ 并使用一个bitwise OR | 自身。

    结果,你得到一个 32 位整数。

    【讨论】:

    • _ 未在代码中指定值。这就是它令人困惑的原因。
    【解决方案3】:

    除了这里已经详细解释的内容之外,您的代码是非常常规的 JavaScript,没有什么特别之处...

    我在不止一种编程语言中遇到过类似的代码,当语法冗长用于生成类似于文本艺术(又名 ASCII 艺术)的所谓有趣的表达式时,虽然使代码看起来很奇怪,但也是 100% 有效的代码。

    你的代码示例让人想起了那些愚蠢的笑话,就像有人介绍了一个具有段落长名称的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2012-02-19
      • 2011-01-19
      • 2019-09-10
      • 2011-11-01
      相关资源
      最近更新 更多