2017-08-25 55 views
6

Można użyć if let do wzorca meczu w zakresie:Wiele wzorców nie działa w razie niech

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

ale nie może to działać na wielu wzorach:

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

myślałem, że drugie if let zostało zastąpione przez:

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

co daje? Czy używam niewłaściwej składni? Czy moje oczekiwania, że ​​wiele wzorców powinno działać po prostu źle? Czy to po prostu nie jest realizowane?

playground

+1

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

+0

@interjay ah dzięki, więc to nie jest po prostu zaimplementowane. Problem github wspomina wiele wzorców, ale wtedy dyskusja skupia się na strażnikach. Z jakiegoś powodu (brzydka składnia wynikowa?) Byłem mniej zaskoczony, że strażnicy nie działają, jeśli pozwolili. Rangi działające wbrew wielokrotnym wzorom nie działają wydają mi się nieco mniej intuicyjne ... –

Odpowiedz

8

if let prostu nie obsługuje wielu wzorców (patrz RFC issue 935). Zamiast tego użyj match.