@@ -189,20 +189,91 @@ args = Args["foo", BasePattern("@\d+")]
189189
190190#### MultiVar 与 KeyWordVar
191191
192- ` MultiVar ` 是一个特殊的标注,用于告知解析器该参数可以接受多个值,类似于函数中的 ` *args ` ,其构造方法形如 ` MultiVar(str) ` 。
192+ ` MultiVar ` 是一个特殊的标注,用于告知解析器该参数可以接受多个值,类似于函数中的 ` *args ` ,其构造方法形如 ` MultiVar(str) ` 。其返回值为一个元组,包含了所有匹配到的值。
193193
194194同样的还有 ` KeyWordVar ` ,类似于函数中的 ` *, name: type ` ,其构造方法形如 ` KeyWordVar(str) ` ,用于告知解析器该参数为一个 keyword-only 参数。
195195
196- ::: info
197-
198- ` MultiVar ` 与 ` KeyWordVar ` 组合时,代表该参数为一个可接受多个 key-value 的参数,类似于函数中的 ` **kwargs ` ,其构造方法形如 ` MultiVar(KeyWordVar(str)) `
196+ ` MultiVar ` 与 ` KeyWordVar ` 组合时,代表该参数为一个可接受多个 key-value 的参数,类似于函数中的 ` **kwargs ` ,其构造方法形如 ` MultiVar(KeyWordVar(str)) ` 。其返回值为一个字典,包含了所有匹配到的键值对。
199197
200198` MultiVar ` 与 ` KeyWordVar ` 也可以传入 ` default ` 参数,用于指定默认值
201199
202200` MultiVar ` 不能在 ` KeyWordVar ` 之后传入
203201
202+ ::: code-group
203+
204+ ``` python [MultiVar]
205+ from arclet.alconna import Alconna, Args, MultiVar
206+
207+ alc = Alconna(" test" , Args[" foo" , MultiVar(str )])
208+
209+ res = alc.parse(" test 123 456 789" )
210+ print (res.query(" foo" )) # ('123', '456', '789')
211+ ```
212+
213+ ``` python [MultiVar(KeyWordVar)]
214+ from arclet.alconna import Alconna, Args, MultiVar, KeyWordVar
215+
216+ alc = Alconna(" test" , Args[" foo" , MultiVar(KeyWordVar(str ))])
217+
218+ res = alc.parse(" test 123=456 789=abc" )
219+ print (res.query(" foo" )) # {'123': '456', '789': 'abc'}
220+ ```
221+
222+ :::
223+
224+ #### StrMulti
225+
226+ ` StrMulti ` 是一个特殊的 ` BasePattern ` 。
227+
228+ 其基于 ` MultiVar(str) ` , 用于匹配多个字符串参数,并返回拼接后的字符串。
229+
230+ ``` python
231+ from arclet.alconna import Alconna, Args, StrMulti
232+
233+ alc = Alconna(" test" , Args[" foo" , StrMulti])
234+
235+ res = alc.parse(" test 123 456 789" )
236+ print (res.query(" foo" )) # '123 456 789'
237+ ```
238+
239+ #### 泛匹配
240+
241+ ` Args ` 通过设置 ` var ` 为 ` AllParam ` 来实现泛匹配。
242+
243+ ` AllParam ` 是一个特殊的 ` BasePattern ` ,从 ` arclet.alconna.typing ` 中导入。
244+
245+ 当命令解析进行到 ` AllParam ` 时,传入命令的** 后续所有数据都会被匹配到该参数上** 。
246+
247+ ::: code-group
248+
249+ ``` python [直接使用]
250+ from arclet.alconna import Alconna, Args, AllParam
251+
252+ alc = Alconna(" test" , Args[" foo" , AllParam])
253+
254+ res = alc.parse(" test 123 456 789" )
255+ print (res.query(" foo" )) # ['123', '456', '789']
256+ ```
257+
258+ ``` python [配置类型]
259+ from arclet.alconna import Alconna, Args, AllParam
260+
261+ alc = Alconna(" test" , Args[" foo" , AllParam(str )])
262+
263+ res = alc.parse([" test" , " 123" , " 456" , 789 ])
264+ print (res.query(" foo" )) # ['123', '456']
265+ ```
266+ :::
267+
268+ 可以注意到,` AllParam ` 的返回值是一个列表,包含了所有匹配到的值。
269+
270+ ::: info
271+
272+ 返回值的类型与 ` Argv.converter ` 有关,默认处理为列表。而在其他场景继承并修改了 ` Argv ` 的情况下,返回值可能会有所不同。
273+
204274:::
205275
276+
206277### 参数单元(Arg)
207278
208279** Arg** 是 ** Args** 的最小单位:
0 commit comments