9
私は文字列は「$」が含まれているかどうかを確認したいと「$」の後に何かがある場合:マッチガードと同じマッチアームで2つのパターンを組み合わせることは可能ですか?
fn test(s: String) {
match s.find('$') {
None | (Some(pos) if pos == s.len() - 1) => {
expr1();
}
_ => { expr2(); }
}
}
しかし、それはコンパイルされません:
私はこのコードを試してみました
error: expected one of `)` or `,`, found `if`
それは1試合腕にNone
とSome
を結合することは不可能ですか?
もしそうなら、expr1()
を別の機能に移動することを除いて、複製しない簡単な方法がありますか?
これはうまくいきますが、 '$'はASCIIで1バイトを占めるという事実に依存しています。より一般的な解決法は、['char :: len_utf8'](https://doc.rust-lang.org/std/primitive.char.html#method.len_utf8)を使用するかもしれません:' i!= s.len() - 'c'.len_utf8() '。 – Shepmaster
私はゴルフコード '' s.chars()。skip_while(| i | i!= '$')。skip(1).next()。is_some() 'がインデックスの計算よりはるかに明確です。 –