使用 nom 进行解析时,无法推断在函数“tuple”上声明的类型参数“I”的类型
Cannot infer type for type parameter `I` declared on the function `tuple` when parsing with nom
我正在尝试使用 nom
's tuple
功能。该文档提供了以下示例:
use nom::sequence::tuple;
use nom::character::complete::{alpha1, digit1};
let parser = tuple((alpha1, digit1, alpha1));
当我尝试时,出现编译错误:
error[E0283]: type annotations needed
--> src/main.rs:20:18
|
20 | let parser = tuple((alpha1, digit1, alpha1));
| ------ ^^^^^ cannot infer type for type parameter `I` declared on the function `tuple`
| |
| consider giving `parser` a type
|
如果我想给变量添加一个类型,会是什么类型?我知道它必须是 FnMut
的一些变体,但我不确定它是如何工作的。
Cargo.toml
[dependencies]
nom = ">=5.0"
类型推断需要足够的信息来实际推断类型。您可以通过从文档中复制完整示例来提供所需信息,包括两个 assert_eq!()
语句:
use nom::sequence::tuple;
use nom::character::complete::{alpha1, digit1};
let mut parser = tuple((alpha1, digit1, alpha1));
assert_eq!(parser("abc123def"), Ok(("", ("abc", "123", "def"))));
assert_eq!(parser("123def"), Err(Err::Error(("123def", ErrorKind::Alpha))));
额外的调用通知编译器有关参数和 return 由 tuple()
编辑的函数 return 类型的信息,这反过来又为编译器提供了足够的信息来推断所有类型参数tuple()
电话。
或者,您可以将类型参数显式传递给 tuple()
函数。以下是您需要为 Rust 提供的能够推断所有类型的最少信息量:
let _parser = tuple::<&str, _, (_, _), _>((alpha1, digit1, alpha1));
请注意,类型推断在 Rust 中如何工作的细节不是语言规范的一部分,并且可能会在 Rust 的未来版本中发生变化。虽然 Rust 具有很强的向后兼容性保证,但有时您可能需要在升级到较新版本时向代码添加一些类型注释。
我正在尝试使用 nom
's tuple
功能。该文档提供了以下示例:
use nom::sequence::tuple;
use nom::character::complete::{alpha1, digit1};
let parser = tuple((alpha1, digit1, alpha1));
当我尝试时,出现编译错误:
error[E0283]: type annotations needed
--> src/main.rs:20:18
|
20 | let parser = tuple((alpha1, digit1, alpha1));
| ------ ^^^^^ cannot infer type for type parameter `I` declared on the function `tuple`
| |
| consider giving `parser` a type
|
如果我想给变量添加一个类型,会是什么类型?我知道它必须是 FnMut
的一些变体,但我不确定它是如何工作的。
Cargo.toml
[dependencies]
nom = ">=5.0"
类型推断需要足够的信息来实际推断类型。您可以通过从文档中复制完整示例来提供所需信息,包括两个 assert_eq!()
语句:
use nom::sequence::tuple;
use nom::character::complete::{alpha1, digit1};
let mut parser = tuple((alpha1, digit1, alpha1));
assert_eq!(parser("abc123def"), Ok(("", ("abc", "123", "def"))));
assert_eq!(parser("123def"), Err(Err::Error(("123def", ErrorKind::Alpha))));
额外的调用通知编译器有关参数和 return 由 tuple()
编辑的函数 return 类型的信息,这反过来又为编译器提供了足够的信息来推断所有类型参数tuple()
电话。
或者,您可以将类型参数显式传递给 tuple()
函数。以下是您需要为 Rust 提供的能够推断所有类型的最少信息量:
let _parser = tuple::<&str, _, (_, _), _>((alpha1, digit1, alpha1));
请注意,类型推断在 Rust 中如何工作的细节不是语言规范的一部分,并且可能会在 Rust 的未来版本中发生变化。虽然 Rust 具有很强的向后兼容性保证,但有时您可能需要在升级到较新版本时向代码添加一些类型注释。