我对拉斯特的宏不熟悉。
我想找到一种方法来实现这样的行为:early return in iterations
我了解到可以使用声明性宏生成元组,如下所示:
fn function(input) -> Result<input_type,err_type> {
// do something
}
macro_rules! to_tuple {
($($input:expr),*) => (($( function($input), )*));
}
fn main() {
to_tuple!(i_1, i_2);
// I will get a tuple: (o_1, o_2)
}
现在我想在每次迭代中检查function
的结果。如果它们都正常,我将得到Ok(tuple)
。如果出现错误,我将得到Err(stirng)
。例如:
to_tuple!(right_1, right_2) => Ok( (o_1, o_2) )
to_tuple!(right_1, right_2, right_3) => Ok( (o_1, o_2, o_3) )
to_tuple!(right_1, wrong_1, right_2) => Err( string )
使用声明性宏可以做到这一点吗?
我认为宏产生的不是真实的的迭代,所以没有迭代,因此显然没有“早回”。我希望我错了。如果有人有任何想法,请告诉我。
1条答案
按热度按时间aoyhnmkz1#
这将是
try
blocks的完美之处,只是它们不稳定,但我们可以用闭包来模拟它们: