Open6

Rust勉強していて『え!?何これ???』っと感じたスレ

Ryo24Ryo24

「r#」って何?

キーワード(try/catch/async などコンパイラで使用済みの識別子)をraw identifierとして宣言することができる!
https://doc.rust-lang.org/rust-by-example/compatibility/raw_identifiers.html

Ryo24Ryo24

type を構造体の中で宣言しようとしたら↓のエラーを吐いた

エラー文
error: expected identifier, found keyword `type`
  --> src/main.rs:79:5
   |
79 |     type: String,
   |     ^^^^ expected identifier, found keyword
   |
help: escape `type` to use it as an identifier
   |
79 |     r#type: String,
   |     ++

error: expected identifier
  --> src/main.rs:79:5
   |
79 |     type: String,
   |     ^^^^

Ryo24Ryo24

Stringと&str の違い

Rustには主要な文字列型が二種類あります。&str と Stringです。 まず &str について説明しましょう。 &str は「文字列スライス」と呼ばれます。 文字列スライスは固定サイズで変更不可能です。文字列スライスはUTF-8のバイトシーケンスへの参照です。
https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/strings.html

Ryo24Ryo24

String:from("hoge")とは?

let s1: String = String::from("hello world");
let s2: Box<str> = s1.into_boxed_str();
let s3: String = String::from(s2);

assert_eq!("hello world", s3)

固定長文字列(&'static str)を可変長文字列(String)に変換し、再度固定長文字列(&'static str)に変換している。したがって、String:from("hoge")to_stringと同じ動作をしているのかな?

Boxって?

Rust(大半の言語は)スタック領域にデータが保存されるため、ボックス化しヒープ領域にデータを保存するのがBox
https://doc.rust-lang.org/std/string/struct.String.html#method.from-11