match
矢印の左に記載した条件に一致していたら、右側に記載のあるものを呼び出す。
let mut count = 0; match coin { // {:?}州のクォーターコイン Coin::Quarter(state) => println!("State quarter from {:?}!", state), _ => count += 1, }
if-else文でこのように書き換えられるらしい。
let mut count = 0; if let Coin::Quarter(state) = coin { println!("State quarter from {:?}!", state); } else { count += 1; }
public
パブリックファンクションを宣言するにはpubをつけることで宣言できる。
pub fn eat_at_restaurant()
入れ子にした関数は絶対パス、相対パスで呼び出せる。 対象の関数
mod front_of_house { mod hosting { fn add_to_waitlist() {} fn seat_at_table() {} } mod serving { fn take_order() {} fn serve_order() {} fn take_payment() {} } }
crate::front_of_house::hosting::add_to_waitlist(); front_of_house::hosting::add_to_waitlist();
相対パスをsuperにすることもできる
super::serve_order();
enumもpublicにすることができる。
pub enum Appetizer { Soup, Salad, }
use
useを使うと面倒くさい相対パスや絶対パスを使わなくて済む。
use crate::front_of_house::hosting; pub fn eat_at_restaurant() { hosting::add_to_waitlist(); }
selfを付けると相対パスでOK。
use self::front_of_house::hosting;
一応こういうこともできるけど、お勧めしないらしい。
use crate::front_of_house::hosting::add_to_waitlist; add_to_waitlist();
enumや構造体などをuseで持ち込む場合はフルパスで書くのが基本らしい。
use std::collections::HashMap;
as
asを使うと別名称をつけることができる。 SQLみたい。
use std::io::Result as IoResult;
ライブラリ宣言をコンパクトに
useするライブラリの数が多い場合は下記のようにまとめられる。
use std::{cmp::Ordering, io};
glob演算子
glob演算子を使うとライブラリの中のものすべてにスコープされるためそのライブラリの関数がすべて使える。
use std::collections::*;
*これglob演算子っていうんだね。アスタリスクって言ってた。
vec
let v: Vec<i32> = Vec::new();
format
format!マクロを使うと変数をつかって文字列を生成できる。
let s = format!("{}-{}-{}", s1, s2, s3);
文字列を抜き出す
スライスを使うことで抜き出せる見た。C++みたくa[0]みたいに宣言はできない。
let hello = "hello"; let ans = &hello[0..4];
HashMap
hashmapから値を取り出すには下記のように入力する。
for (key, value) in &scores { println!("{}: {}", key, value); }
{:?}をすることでprintln!マクロ内でもみれる。
println!("{:?}", scores);
ろぐ
https://github.com/jacoloves/lab/commit/71718def7fe5a3be3f7d15230db66b116dfd52ac