Node.js混淆了参数的语法
我正在查看Buffer.alloc()方法的Buffer类,文档将此方法声明为Buffer.alloc(size [,fill [,encoding]]),我很困惑这个参数是什么。 我来自c + + / c / java / c#语法抛出我不知道什么大小[,填充[,编码]]应该代表? 数组? 什么是逗号? 为什么这些嵌套? 为什么有空插槽? 我看了,似乎不能find解释或教程? 这是一个Node.js具体还是这是一个JavaScript的东西?
方括号表示来自扩展的Backus-Naurforms ,并且指示所包含的参数是可选的。
size[,fill[,encoding]]
意味着size
参数是必需的,但是fill
和encoding
(包括前面的逗号)是可选的。 而且,这意味着只有在指定了fill
情况下才能指定encoding
。
引用这个答案 :
方括号表示里面的东西是可选的 – 要么有,要么没有。 这是一个简洁的方式列出有效的调用表单。
在你的情况下,方括号表示有3个签名:
Buffer.alloc(size ) Buffer.alloc(size, fill ) Buffer.alloc(size, fill, encoding)
暗示
为了可读性,我故意忽略了这些参数。 每当你看到像a(b, , ,)
,,,)这样a(b, , ,)
东西时,想象在没有值的逗号之间有一个undefined
或null
,所以a(b, undefined, undefined, undefined)
。
简单的例子
另一个例子可能是这样的:
example(alpha, [, beta], [, gamma], delta)
…这意味着以下签名将起作用:
example(alpha, , , delta) example(alpha, , gamma, delta) example(alpha, beta, , delta) example(alpha, beta, gamma, delta)
嵌套
在你的情况下, Buffer.alloc(size[,fill[,encoding]])
, encoding
参数只有在fill
参数被提供时才被提供,因为encoding
嵌套在fill
周围的方括号中。 所以,以下是无效的:
Buffer.alloc(size, , encoding).
多嵌套参数
多个参数也可以嵌套在一个括号内:
example2(alpha, [, beta, gamma] [,delta])
…这意味着这些电话是有效的 :
example2(alpha, beta, gamma, ) example2(alpha, , , ) example2(alpha, beta, gamma, delta) example2(alpha, , , delta)
…虽然这些是无效的 :
example2(alpha, beta, , ) example2(alpha, , gamma, ) example2(alpha, beta, , delta) example2(alpha, , gamma, delta)
在哪里可以find这个符号
正如@ cybersam在他的回答中所说,这个符号被称为Extended Backus-Naur 。 它也可以在很多手册页 , jQuery文档和许多其他文档中find。
文档中的方括号中的参数通常意味着“这部分是可选的”。 在Buffer.alloc
的情况下,这意味着您可以通过三种方式调用它:
Buffer.alloc(size) Buffer.alloc(size, fill) Buffer.alloc(size, fill, encoding)
括号不是实际的JavaScript,而是通常用于在文档中描述这个。
- JavaScript / Node Promises:按顺序执行它们
- socket.io而不使用默认名称空间/房间function
- 如何模块化JavaScript类(将方法拉出主文件,将方法导入主文件)
- Docker – 为什么这个express.js容器有一个暴露/发布的端口拒绝连接? (使用boot2docker)
- OAuth 2.0令牌处理。 有没有服务器令牌和客户端令牌?
- Node.js / Expressasynchronousfile upload
- 创build一个用于AJAX的简单Node.js Web服务
- 如何与jasmine-node一起使用jsdom.jQueryify?
- 交互式命令行用户界面在节点