Rust勉強してみた 3日目
学んだ細かいこと
タプルをで引数を渡す場合は(タプル名: (型, 型))みたくするといい感じ。
fn area(dimensions: (u32, u32)) -> u32 { dimensions.0 * dimensions.1 }
渡すときはタプルを使って渡してあげればよい。
let a = (30, 50); let b = area(a);
構造体の使い方
昨日も少し学習した構造体をさらに勉強した。
struct Rectangle { width: u32, height: u32, }
このような構造体があったら、下記のように宣言して使う。
let rect1 = Rectangle { width: 30, height: 50 };
構造体の中身を扱う関数は「所有権を借用するため」に 引数が参照型になる。
fn area(rectangle: &Rectangle) -> u32 { rectangle.width * rectangle.height }
関数に代入する際も&を付ける。
let a = area(&rect1);
構造体の中身を直にみたいならDebugトレイトを使用し、{:?}すると見れるようになる。
#[derive(Debug)] fn main() { let rect1 = Rectangle { width: 30, height: 50 }; println!("rect1 is {:?}", rect1); }
メソッド
メソッドの書き方はimplをつけることでメソッドとして機能するようになるらしい。
impl Rectangle { fn area(&self) -> u32 { self.width * self.height } }
selfは自分自身の構造体の値を表している。 要は下記の構造体をしようしている。
struct Rectangle { width: u32, height: u32, }
enum
enumはCやGoの同じような感じで宣言できるみたい。 ただし各値に代入したい場合は::を付ける必要がある。
enum Coin { Penny, Nickel, Dime, Quarter, } fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => 1, Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter => 25, } }
ろぐ
https://github.com/jacoloves/lab/commit/245e23bf1c529734e6ef24e7253238de096fb54e