javascript - 我很难阅读文档
问题描述
我一直在阅读文档,但是当我看到方法或函数时,我看到了类似的东西。
str.count(sub[, start[, end]])
emitter.emit(eventName[, ...args])
我不知道什么是括号,什么是必需参数,什么是可选的。
这段代码来自 python 文档,我还看到了括号和其他内容。
我想要的是:
- 这种模式的名称是什么。
- 如何理解
因为我经常看到这种模式,实际上我喜欢它但不理解它,我想用它来记录我未来的代码。
解决方案
概述
简单地说,方括号内的所有内容都显示了一个可选参数。当您在其他方括号内有方括号时,这意味着第二个方括号仅在使用第一个方括号时才有效。
第一份文件
str.count(sub[, start[, end]])
文档显示了这一点:str.count(sub[, start[, end]])
. ( )
(sosub
和) 中start
的每个变量end
都是参数。
让我们从一个更简单的例子开始。想象一下,文档只允许像这样的两个参数:str.count(sub, start)
. 这里的问题是这start
是可选的!如果用户想从字符串开头以外的地方开始搜索,则只需包含它。
对此的解决方案是始终在[ ]
. 所以这意味着我们的新文档是:str.count(sub[, start])
.
逗号在里面的原因[ ]
是因为你几乎可以想到“删除”里面的所有东西[ ]
。如果逗号在外面,像这样:str.count(sub, [start])
并且你删除了里面的所有东西[ ]
,那么它看起来像:str.count(sub, )
我们可以看到这是错误的。
第一个文档,进一步解释
[ ]
这就是你所看到的有趣逗号背后的原因。但是接下来的问题是“为什么会有类似的东西[, [ ]]
???” 遗迹。
答案是:因为一些可选参数依赖于其他参数。在这种情况下,end
只有在使用了参数的情况下才能使用该start
参数。如果我们尝试之前的规则并保持两者start
和end
内部相同[ ]
,那么我们得到:str.count(sub[, start, end])
。
这是错误的,因为它表明我们只能使用两个可选参数或不使用任何参数,因为如果我们删除了[ ]
我们会得到:str.count(sub)
。这里没有中间地带。
为了告诉我们的用户这一点,我们将第二个[ ]
放在第一个中,这样第二个可选参数只有在使用第一个时才可用。因此,如果我们只想使用start
可选参数,我们保留第一个[ ]
,并删除第二个[ ]
(在第一个内部),这意味着str.count(sub[, start[, end]])
变成str.count(sub, start)
. 我们只删除了最里面的[ ]
.
使用这个新的系统[, [ ]]
,也意味着我们不能只使用end
参数,因为要删除start
我们必须删除外部[ ]
,但这也删除了内部[ ]
,然后删除end
。
第一个文档,进一步的解释
“但如果我们希望能够使用两者的任意组合呢?” 你没有。如果我们做了类似的事情:这意味着我们可以有和str.count(sub[, start][, end])
的任意组合。start
end
这会破坏事情,因为如果我们只使用end
参数,就无法判断它是否start
或end
!如果我们使用str.count(sub[, start][, end])
,我们不知道是要从 index开始,还是str.count(sub, 5)
要在index结束。5
5
第二份文件
emitter.emit(eventName[, ...args])
这个例子几乎和之前完全一样,除了...
实际上是JavaScript 中的一个操作符。
使用我们的新知识,我们可以知道它emitter.emit
有一个必需参数eventName
(因为它不在里面[ ]
)和一个可选参数[, ...args]
。
...
简单的意思是: “获取在此之后提供的所有额外参数,并将它们放入一个数组中”。
举个例子:
function hello(name, ...extraNames) {
console.log(extraNames);
console.log('hi ' + name);
for (let i=0; i<extraNames.length; i++) {
console.log('hi extra name ' + extraNames[i]);
}
}
hello('dan')
// []
// hi dan
hello('dan', 'frank', 'mark')
// ['frank', 'mark']
// hi dan
// hi extra name frank
// hi extra name mark
之所以在, ...args
里面[ ]
是因为那些额外的参数(称为剩余参数)总是可选的。它们总是用于捕获传递的额外参数,因此也必须在函数定义中排在最后。
...
Python 中参数的等价物是*args
(arguments),使用如下:
def hello(name, *extraNames):
print(extraNames)
print('hi ' + name)
for extraName in extraNames:
print('hi extra name ' + extraName)
hello('dan')
# []
# hi dan
hello('dan', 'frank', 'mark')
# ['frank', 'mark']
# hi dan
# hi extra name frank
# hi extra name mark
还要查看**kwargs
(关键字参数),它允许您将任意数量的“键值对”作为字典给出,例如:
def hello(**kwargs):
print(kwargs)
for key in kwargs:
print(key + ' equals ' + kwargs[key])
hello('one'='apple', 'two'='orange')
# {'one'='apple', 'two'='orange'}
# one equals apple
# two equals orange
JavaScript 没有与此等效的功能,但您始终可以将值对象作为“kwargs”传递。
希望这可以帮助!
推荐阅读
- jquery - 如何在 Angular 项目中包含 jQuery 并尝试使用 Reactive Forms 时解决问题
- html - Bootstrap 第 13 列垂直显示
- php - 为什么 PHP 的 NumberFormatter 是四舍五入格式的瑞士法郎金额?
- php - 一个适用于多个数据库的 laravel 应用程序
- git - Git 在 rebase 后将 100 个来自其他分支的提交添加到我的分支中
- sql-server - 用于 MS SQL 的 pandas to_sql
- model-view-controller - _Layout.cshtml 可以有控制器吗
- java - JavaFX、文本字段、事件处理程序
- ms-access - 传递 RecordCount 属性时 MsgBox 不出现
- python - 在txt文件中制作列表,用于注册和登录系统