一个方括号引发的惨案
抛出问题我们经常在文档中看到形容 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 。
- 界面设计中的分割方式
- gen.g战队|上市一个月直降500元,骁龙8Gen1+5000万,破2亿元销售额仅3分钟
- 耳机|realmeGT2Pro官方降价500元,还送耳机,不用犹豫了
- 薇娅方|淘宝直播相关人士回应“薇娅将3月复出”:不太可能
- 宁德|如何提升引力魔方的转化率
- ipad mini|iPad mini6的出现果冻屏的原因,是受到LCD刷新速度和刷新方向的影响
- 电商业|电商行业:这个春节有一个非常“反常”的现象!
- 浏览器|浏览器的复杂程度,可以和一个操作系统媲美
- sim卡|随身WIFI究竟是不是一个骗局?
- 苹果|谁说pci-e 4.0 SSD门槛很高,选对方案就省钱