2017-08-25 64 views
6

工作,就可以使用if let模式匹配一​​個範圍:多種模式不若讓

let n=1 
if let 1...3 = n { println!("found in range") } 

,但我不能讓它在多模式工作:

// this does not compile 
if let 1 | 2 | 3 = n { println!("found in pattern") } 
//  -^ unexpected token 

我以爲第二個if let desugared:

// this does compile and work 
match n { 
    1 | 2 | 3 => println!("found in pattern"), 
    _ => {} 
} 

那麼是什麼給?我使用錯誤的語法嗎?我期望多種模式應該起作用嗎?這只是沒有實施?

playground

+1

https://github.com/rust-lang/rfcs/issues/935 – interjay

+0

@interjay啊謝謝,所以它只是沒有實現。 github問題確實提到了多種模式,但是後面的討論集中在了看守方面。出於某種原因(醜陋的結果語法?)我不那麼驚訝,如果讓守衛不工作。範圍工作與多種模式不起作用似乎有點不直觀,我... –

回答

8

if let只是不支持多模式(見RFC issue 935)。改爲使用match