#return #continue #break #macro #unwrap

unwrap_or

提供四个简单的 unwrap Result 和 Option 宏,允许在 return、continue 和 break 等任何 inline-scoped 代码中使用

2 个稳定版本

使用旧的 Rust 2015

1.0.1 2023 年 7 月 28 日
1.0.0 2021 年 12 月 14 日

#879Rust 模式

每月 40 次下载
用于 2 crates

自定义许可协议

4KB

unwrap_or

Unwrap-or 提供了四个宏,允许您在调用函数的相同作用域中使用代码。它们类似于 Rust 的 unwrap_or_else,但提供的代码不在闭包中,而是在函数本身中。

这允许您编写更灵活的内容。当发生错误时,您可以拥有 return、break 或 continue 语句,而无需担心任何复杂的返回逻辑。您还可以直接引用调用函数中的变量,而无需将它们移动到闭包中。

以下是一个使用示例

fn a_function_which_may_fail() -> Result<String, String> {
	Error("There was an error!")
}

fn another_function() -> Result<(), String> {
	let _ok_value = unwrap_ok_or!(a_function_which_may_fail(), error_value, {
		log(error_value);
		return error_value;
	});
	Ok(())
}

上面的宏展开为一个简单的 match 函数

let _ok_value = match a_function_which_may_fail() {
	Ok(v) => v,
	Err(error_value) => {
		log(error_value);
		return error_value;
	}
}

有四个具有这种语法的函数

let ok_value = unwrap_ok_or!(function_returning_result, error_variable_name, code_to_run_on_error);

let error_value = unwrap_err_or!(function_returning_result, ok_variable_name, code_to_run_on_ok);

let some_value = unwrap_some_or!(function_returning_option, code_to_run_on_none);

let none_value = unwrap_none_or!(function_returning_option, some_variable_name, code_to_run_on_some);

无运行时依赖