1

我有使用 Haskell parsec 库的经验,在 Haskell 中,我们只是在任何地方都使用函数。

Rust nom 提供Parsertrait 并且任何实现它的类型都可以像instance.parse(intput).

但是像map不返回的组合器Parser

pub fn map<I, O1, O2, E, F, G>(
    first: F, 
    second: G
) -> impl FnMut(I) -> IResult<I, O2, E> 
where
    F: Parser<I, O1, E>,
    G: FnMut(O1) -> O2, 

我想知道,什么时候我们应该更喜欢Parsertrait,什么时候应该更喜欢impl FnMut(I) -> IResult<I, O2, E>.

我的猜测是,我们总是更喜欢使用Parsertrait 作为参数(所以我们对参数的限制较少)和impl FnMut返回(这样用户使用起来更方便)。

4

0 回答 0