Я пытаюсь изучить nom, но у меня проблема, когда take_while
не принимает is_digit
или любой другой is_xxxx
.
У меня есть строки, которые я хочу проанализировать, которые выглядят так
#123 = ABCDEF (...);
где я хочу получить часть «123» (и, в конечном итоге, части ABCDEF и (...). Но в то время я думаю, что одно).
Мой парсер в настоящее время выглядит так
use nom::{
bytes::complete::take_while,
character::is_digit,
error::ParseError,
IResult
};
// Get row id
fn id<'a, E: ParseError<&'a str>>(i: &'a str) -> IResult<&'a str, &'a str, E> {
take_while(is_digit)(i)
}
Определение is_digit
выглядит так
pub fn is_digit(chr: u8) -> bool
А поскольку синтаксический анализатор id
принимает &str
, он будет жаловаться на несоответствие типов. Но можно ли вообще как-то использовать is_digit? Могу ли я где-нибудь выполнить преобразование типа, не выделяя ничего. Я действительно хочу, чтобы это было максимально эффективно.
Кажется, что в таких ситуациях следует использовать предоставленные is_xxxx
функции, но я могу ошибаться.
Спасибо!