作业里的一道题 实在是做不出来了 请教大家一下 希望各位大神能够帮帮忙 我查了一些资料 发现这个和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>。