Rustでhead::tail, first::restのようなパターンマッチがしたい
結論
[first, rest @ ..]
でOK
コード
Rust Playgroundでの動作確認済みのコードです
https://play.rust-lang.org/
fn match_test(s: &[char]) {
match s {
[first, rest @ ..] => {
print!("{}", first);
match_test(rest);
}
_ => print!("\nend"),
}
}
fn main() {
match_test(&vec!['h', 'e', 'l', 'l', 'o']);
}
結局
Subslice patternsという名前で既に安定化されているものらしいことがわかりました。
https://blog.rust-lang.org/inside-rust/2020/03/04/recent-future-pattern-matching-improvements.html
まだ初心者なのでよくわかってないですが、Vecだとどうもできないみたいです。(スライスとVecの違いもわかってない。調べねば……)
あと、かつてはnightlyで
[first, rest..]
という記法が存在していたようです。
が、現在これはnightlyでも動かないみたいです。。。
(これに非常に惑わされた。参考にしていたコードがこの記法をnightlyで使っていたので……。)
おまけ(追記)
[rest @ .., last]
[first , rest @ .., last]
こんなアクロバティックなことも出来る模様。Scalaなどではこんなこと出来なかったような……。
検索用
スライスのパターンマッチ
Vecのパターンマッチ
Author And Source
この問題について(Rustでhead::tail, first::restのようなパターンマッチがしたい), 我々は、より多くの情報をここで見つけました https://qiita.com/ryo0/items/4582119c0221f971cfa3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .