作业里的一道题 实在是做不出来了 请教大家一下 希望各位大神能够帮帮忙 我查了一些资料 发现这个和nom::error::context非常相似 但是还是百思不得其解做不出来 大概只能想出来第一题的 return type 是 IResult
以下是一段Rust Statement
let (i, j) = my_function(bar)(i)?;
以下是my_function()
的函数签名:
pub fn my_function<I: Clone, O, E: ParseError<I>, F>(f: F) -> impl Fn(I) -> IResult<I, Option<O>, E>
where
F: Fn(I) -> IResult<I, O, E>
以下是 IResult
的定义
type IResult<I, O, E = (I, ErrorKind)> = Result<(I, O), Err<E>>;
回答以下问题
-
my_function
的返回值是什么类型? -
bar
是什么类型? -
以下表达的返回值是什么类型?
my_function(bar)(i)?
j
是什么类型?
1
共 2 条评论, 1 页
评论区
写评论正解。IResult的定义很重要:type IResult<I, O, E = (I, ErrorKind)> = Result<(I, O), Err>
显然,
my_function
返回的是一个 callable,实现了Fn(I)->IResult<I,Option<O>,E>
trait.bar
这里是my_function
的参数,所以是F
类型,也就是一个 callable,实现了Fn(I)->IResult<I,O,E>
trait.my_function(bar)(i)?
被 call 之后,返回的是IResult<I,Option<O>,E>
,try 之后是Result
的 Ok 内容,也就是(I,Option<O>)
类型,这里I
是i
的类型,O
的类型得看bar
的签名。j
也就是上面说的Option<O>
。