以前可能有人问过这个问题,但我找不到任何东西..
在 Go 中,你可以做这样的事情
v1 := 3
v2 := 4
if v := v1 - v2; v < 4 {
// use v
}
Run Code Online (Sandbox Code Playgroud)
在 Rust 中,我找不到用if let
绑定来做到这一点的方法
let v1 = 3;
let v2 = 4;
// able to match an exact value
if let v @ 4 = v1 - v2 {}
// but unable to match a range of value like in a `match` block
if let v @ (0..4) = v1 - v2 {}
if let v (if v < 4) = v1 - v2 {}
Run Code Online (Sandbox Code Playgroud)
当然,声明v
外部有效,但有点尴尬,因为它仅在if
块中使用
对此作出回应
当然,在外部声明 v 是可行的,但有点尴尬,因为它仅在
if
块中使用
在 Rust 中,您可以随时创建显式块。考虑
// Some code ...
{
let v = v1 - v2;
if v < 4 {
...
}
}
// Some more code ... (v doesn't exist down here anymore)
Run Code Online (Sandbox Code Playgroud)
如果您担心的是局部变量的作用域太大(这是一个合理的担忧),那么您可以创建一个显式块来指示作用域何时结束,以便借用检查器和人类读者都清楚地知道超出该点后不再使用变量。
您的第一次尝试很好,只是独占范围模式 ( ..
) 是实验性的。您可以使用包含模式 ( ..=
) 来代替:
if let v @ 0..=3 = v1 - v2 {}
Run Code Online (Sandbox Code Playgroud)
Guards( if ...
) 不可用于if let
,但您可以使用match
:
match v1 - v2 {
v if v < 4 => {}
_ => {}
}
Run Code Online (Sandbox Code Playgroud)