= 3 { if let Token::Type1(value1) = &v[0] { -6ren">
gpt4 book ai didi

rust - Rust 2018 是否支持 "if let"链接?

转载 作者:行者123 更新时间:2023-11-29 07:46:03 25 4
gpt4 key购买 nike

我正在解析标记向量,每个标记都是枚举类型。这意味着我得到了很多代码,例如:

if v.len() >= 3 {
if let Token::Type1(value1) = &v[0] {
if let Token::Type2(value2) = &v[1] {
if let Token::Type(value3) = &v[2] {
return Parsed123(value1, value2, value3);
}
}
}
}

这非常难看 - 我发现我可以这样做让它变得更好一点:

if v.len() >= 3 {
if let (Token::Type1(value1), Token::Type2(value2), Token::Type3(value3)) =
(&v[0], &v[1], &v[2])
{
return Parsed123(value1, value2, value3);
}
}

但老实说,也好不了多少。

但是,有一些已解决的问题/RFC 用于链接这些条件和“if let”位,感觉更符合人体工程学 -- Tracking issue for eRFC 2497 "if- and while-let-chains take 2"Support && in if let expressions -- 这会让我写下类似的东西:

if v.len() >= 3 &&
let Token::Type1(value1) = &v[0] &&
let Token::Type2(value2) = &v[1] &&
let Token::Type3(value3) = &v[2]
{
return Parsed123(value1, value2, value3);
}

但是,我似乎无法使用 edition="2018" 在我的 nightly Rust 副本中编译它(确切版本是 1.32.0-nightly (653da4fd0 2018- 11-08)).因此,要么是我的语法错误,要么是我误解了 RFC/问题,并且此功能尚未落地。无论哪种方式,我都希望了解有关此功能的一些信息。

最佳答案

RFC #2497not been implemented yet . GitHub issue you linked仅用于描述如何to deal with the ambiguity .

To enable the second interpretation in the previous section a warning must be emitted in Rust 2015 informing the user that [...] will both become hard errors, in the first version of Rust where the 2018 edition is stable, without the let_chains features having been stabilized.

所以不,你还不能使用语法,而是使用元组作为变通方法,就像你已经做的那样。

if v.len() >= 3 {
if let (Token::Type1(value1), Token::Type2(value2), Token::Type3(value3)) =
(&v[0], &v[1], &v[2])
{
return Parsed123(value1, value2, value3);
}
}

关于rust - Rust 2018 是否支持 "if let"链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com