我有一个代码块需要一次分配多个可选变量。几乎没有机会获得任何值,因此单独处理每个失败的案例并不是特别有用。如何在Rust中对“选项”分配进行分组?
目前我写的检查是这样的:
if let Some(a) = foo_a() {
if let Some(b) = foo_b() {
if let Some(c) = foo_c() {
if let Some(d) = foo_d() {
// code
}
}
}
}
这将是方便,如果有可能小组作业。没有这一点,增加了新的变数缩进块一个水平,使得在嘈杂的比较和导致不必要的深压痕:
if let Some(a) = foo_a() &&
let Some(b) = foo_b() &&
let Some(c) = foo_c() &&
let Some(d) = foo_d()
{
// code
}
有if语句来分配多个Option
S IN一个办法?
一些细节值得注意:
失败应该短路,而不是叫别人第一个函数。否则,它可以被写成这样:
if let (Some(a), Some(b), Some(c), Some(d)) = (foo_a(), foo_b(), foo_c(), foo_d()) {
// Code
}
可以用一个功能避免深的压痕,但我宁愿不要这样做,因为你可能不希望拥有的身在不同的范围...
fn my_function(a: Foo, b: Foo, c: Foo, d: Foo) {
// code
}
if let Some(a) = foo_a() {
if let Some(b) = foo_b() {
if let Some(c) = foo_c() {
if let Some(d) = foo_d() {
my_function(a, b, c, d);
}
}
}
}
我字面上大约为[把这个作为一个答案(HTTPS://play.rust-lang .org /?gist = 19b24cb31e915860916a99f41347b727&version = stable&backtrace = 0),直到我注意到包含短路的编辑。我不认为它可能会短路多个'如果让'绑定。 [但是有一个开放的RFC](https://github.com/rust-lang/rfcs/issues/929)。 –
@SimonWhitehead,非常感谢,并将其添加到问题中以供澄清 - 因为在某些情况下它仍然可能非常方便。 – ideasman42