Chcę sprawdzić, jeśli ciąg zawiera '$', a jeśli coś jest nie po '$':Czy można połączyć dwa wzory, jeden ze strażnikiem meczowym, w tym samym ramieniu meczowym?
Próbowałem ten kod:
fn test(s: String) {
match s.find('$') {
None | (Some(pos) if pos == s.len() - 1) => {
expr1();
}
_ => { expr2(); }
}
}
Ale to nie kompiluje:
error: expected one of `)` or `,`, found `if`
Czy da się połączyć None
i Some
w jednym meczu ramienia?
Jeśli tak, czy istnieje prosty sposób, aby nie powielać numeru expr1()
, z wyjątkiem przeniesienia go do oddzielnej funkcji?
Działa to, ale polega na tym, że '$' jest ASCII i tym samym zajmuje jeden bajt. Bardziej ogólne rozwiązanie może wykorzystywać ['char :: len_utf8'] (https://doc.rust-lang.org/std/primitive.char.html#method.len_utf8):' i! = S.len() - "c'.len_utf8()'. – Shepmaster
Chcę wejść do kodu golfowego: 's.chars(). Skip_while (| i | i! = '$'). Skip (1) .next(). Is_some()' jest dużo jaśniejsze niż jakiekolwiek obliczenia indeksu imo –