たなしょのメモ

日々勉強していることをつらつらと

Rust勉強してみた 4日目

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

C++でいうところvectorかな。便利そう。

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