一个方括号引发的惨案
抛出问题我们经常在文档中看到形容 fn(a[, b]) 这样的表示方法 , 大家肯定会说:“这代表可选参数 , 意思是可写可不写” 。
我一开始也是这么理解的 , 但是当我在看 Node 文档时 , 我有点懵了 , 例如:
Buffer.alloc(size[, fill[, encoding]])buf.includes(value[, byteOffset][, encoding])buf.write(string[, offset[, length]][, encoding])
【一个方括号引发的惨案】总结一下就是:
- fn(a, [b [, c]])
- fn(a [, b] [, c])
- fn(a, [b, c])
到这 , 你懵了没有?
现在 , 我们该怎么理解 [] 呢?
追本溯源于是 , 我开始找 [] 所代表的含义到底起源于哪 , 是有专门的文档规范去定义的么?
追本溯源 , 我发现 [] 的定义来自于一种叫 巴科斯范式 的语法 , 这个链接来自于百度百科 , 但是它没具体的介绍语法规则 。 再详细的介绍也可以看下这篇博文 。
或许是规则用语言描述起来太过复杂 , 我并没有太看懂是什么意思 。。。
解决问题经过我深入的思(bai)考(du) , 我终于找到解释上面三个例子的方法了 。
你只能自由地拿掉或者保留一整个方括号中的内容 , 而不能将其拆开 。
fn(a, [b [, c]]) , [b [, c]] 这一整个都是可选的 , 也就是 b 和 c 都是可选的 。 然后我们把外层的 [] 去掉 , 这时候就变成了 b [, c] , 也就是说 b 相对于 c 来说是必选的 。 总结一下就是 b、c 都是可选的 , 但是只有传入 b 之后 , c 才能自由的传入或省略 。
fn(a [, b] [, c]) b、c 是两个独立的参数 , 互不依赖 。 可以单独传入(或省略) b(或 C) 。
fn(a, [b, c]) b、c 是一个整体 , 两个只可以同时传入或同时省略 。
总结没想到吧 , 一个方括号竟然也有这么深的坑 。
vx【前端superYue】 , 一只喜欢解读源码的 coder 。
- 教你做一个微信敲门(扫码通知)效果
- 表面上中芯国际被断供,实际上台积电可能成为下一个阿尔斯通
- 如何编写JAVA小白第一个程序
- 在线教育竞争加剧 一家公司何以一个月融资两轮
- 一个忙碌的国庆假期,有南卡骨传导耳机相伴,“搬砖”更轻松
- 人物:刘强东的成功可以破解读书无用论
- 钛轻盈米家防蓝光眼镜,给你的眼睛一个保护层
- 使用手机,体现着一个人的修养涵养
- 华为mate40 Pro拍照再上一个台阶,轻而易举拍月亮
- 中兴通讯正式官宣,系统、芯片一个都不少,150亿没有白花