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

标签 rust syntax nom

我正在寻找 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/

相关文章:

postgresql - 插入 Postgres 时无法与类型为 `uuid` 的 Postgres 值相互转换

javascript - 使用 angularjs Controller 作为样式的双重数据绑定(bind)

java - 为什么在类定义的末尾不需要分号但允许分号?

parsing - 如何使用 nom 精确匹配一个字节?

rust - 模式 `&Unspecified` 和 `&__Nonexhaustive` 未涵盖

closures - 如何编写一个可以组成 `FnMut` 闭包的函数?

rust - Rust 中 ".map(|&x| x)"的目的是什么

期望参数具有多重继承的 Java 方法

parsing - 标称 5 : creating a combinator using another parser multiple times

rust - 使用 Nom 将整数解析为 float