我正在try 将一个if let
条件与一个常规布尔条件相链接.
if let Some(char_first_index) = char_info.first_index_in_string && !char_info.repeats_in_string
然而,当我试图运行它时,我得到了一个编译器问题,将我重定向到https://github.com/rust-lang/rust/issues/53667.这个RFC主要处理链接If‘s.虽然这里提到了一个问题,https://github.com/rust-lang/rfcs/blob/master/text/2497-if-let-chains.md#dealing-with-ambiguity提到了在链接If let和Boolans的情况下处理歧义的问题.
if let PAT = EXPR && EXPR { .. }
// It can either be parsed as (1):
if let PAT = (EXPR && EXPR) { .. }
// or instead as (2):
if (let PAT = EXPR) && EXPR { .. }
重新排序以避免这种歧义:
if !char_info.repeats_in_string && let Some(char_first_index) = char_info.first_index_in_string
或添加方括号:
if !char_info.repeats_in_string && (let Some(char_first_index) = char_info.first_index_in_string)
没有解决问题,我仍然收到相同的编译器错误.我不确定刚才提到的RFC是否被取消了(抱歉,我对GitHub不是很有经验).然而,目前我能找到的唯一解决方案是使用两个独立的IF条件:
if !char_info.repeats_in_string {
if let Some(char_first_index) = char_info.first_index_in_string {
或使用匹配块
match (char_info.repeats_in_string, char_info.first_index_in_string) {
(false, Some(char_first_index)) => {
// former contents of if block
},
_ => {}
}
有没有一种方法,或者让我错过的if
块工作,或者有一个比多个if/单臂匹配块更优雅的解决方案?谢谢,