gpt4 book ai didi

rust - Rust函数语法问题,示例出现在nom中

转载 作者:行者123 更新时间:2023-12-03 11:34:44 25 4
gpt4 key购买 nike

我正在寻找 rust 的nom crate ,其中包含许多解析字节/字符的功能。
许多函数(例如tag(),如下所示)处理的输入不是作为函数的参数提供的,而是在我称之为参数的第二组括号中显示的。例如,如果在大海捞针中寻找一根针,那么tag()函数将使用其自己的参数,这是一种指定针的方式,但是在参数括号后在其自己的括号内分别指定了干草堆(也许是因为它是单个值元组?)。

use nom::bytes::complete::tag;

fn parser(s: &str) -> IResult<&str, &str> {
tag("Hello")(s)
}

在上面的示例中, tag()的工作是测试输入的 s是否以 Hello开头。您可以调用 parser,传入“大家好!”,并且 tag()函数确实可以验证 s的开头是Hello。但是 (s)是如何进入 tag()的呢?
有人可以向我解释此语法,或显示在何处阅读该语法。它有效,我可以使用它,但是我不明白我在看什么!
谢谢

最佳答案

tag() 的返回值为impl Fn(Input) -> IResult<Input, Input, Error>,即该函数返回另一个函数。第一组括号用于调用tag();第二组用于调用它返回的函数。
这使您可以将这些函数返回的“解析器”存储在变量中,并多次使用。或者,换句话说,您也可以编写代替问题中的函数定义的代码

let parser = tag("Hello");
然后以与调用该函数相同的方式调用 parser

关于rust - Rust函数语法问题,示例出现在nom中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65885127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com