这些parens /逗号在此值分配中意味着什么?

时间:2019-02-08 21:58:31

标签: javascript

我正在将GraphQL参考实现从javascript移植到C#。我遇到了一些我不了解或不知道该如何推理的东西,因此我不确定移植它的正确方法。有问题的代码如下所示,或者您可以转到此链接以在存储库parseConstArgument function in parse.js中查看代码:

    function parseConstArgument(lexer: Lexer<*>): ArgumentNode {
  const start = lexer.token;
  return {
    kind: Kind.ARGUMENT,
    name: parseName(lexer),
    value: (expectToken(lexer, TokenKind.COLON), parseConstValue(lexer)),
    loc: loc(lexer, start),
  };
}

所以我不理解的是将行分配给 value 字段。 expectToken 函数返回一个 Token 对象或引发错误。 parseConstValue 函数返回一个 ValueNode 对象。预计会为 value 字段本身分配一个 ValueNode

这是做什么的?它是否首先提取 expectToken 以利用可能的错误,如果没有抛出错误,它将丢弃返回的 Token ,然后分配 parseConstValue 的结果>到字段?这是我的最佳猜测,但我不确定100%,也不知道如何描述此语法以对其进行Google搜索。

另一种令人困惑的字段分配就像这里的parseValueLiteral function in parse.js

return {
    kind: Kind.INT,
    value: ((token.value: any): string),
    loc: loc(lexer, token),
  };

我再次感到困惑的是分配给value字段。在这种情况下, value 需要一个字符串,因此我只是假设这种“古怪”的语法只是将 token.value (它是一个字符串)分配给 value 字段。

如果有人可以解释这一点并可能指向这些javascript功能的文档,将不胜感激。我真的很想确保我不会在端口中引入错误,因为我不了解JavaScript语法。

1 个答案:

答案 0 :(得分:2)

value: (expectToken(lexer, TokenKind.COLON), parseConstValue(lexer))

似乎总是要在expectToken(lexer, TokenKind.COLON)之前执行parseConstValue(lexer),方法是将两个用逗号,运算符分隔的函数调用加上括号,以形成一个表达式,在该表达式中,结果值设置将始终通过parseConstValue(lexer)的返回值来实现。