Rustの b"..." がよくわからなかった調べた

序文

Rustのb"..."がよくわからなかったからコード書いて挙動を調べた。

実験

以下コードを走らせる。

参照:

fn main() {
let s: &str = "myon";
let b: &[u8] = b"myon";
let v: Vec<u8> = "myon".bytes().collect();
let i: &[u8] = "myon".as_bytes();

println!("{}", s);
println!("{:?}", b);
println!("{:?}", v);
assert_eq!(b, i);
}

結果:

myon
[109, 121, 111, 110]
[109, 121, 111, 110]

b"..."って何なんだ?

公式Doc.より引用:

Byte string literal; constructs a [u8] instead of a string

バイト文字列(byte string)を生成するんだな。

要はUTF-8にデコード(Rustの文字列はUTF-8のみ)する前の文字列を、スライス&[...]として生成するものなのだろう。

(実際よくわからない)

まとめ

assert_eq!(b"myon", "myon".as_bytes());