t_wの輪郭

Feedlyでフォローするボタン
Rust

impl

2022/2/18 1:16:00
関連関数引数の型として特質を使う引数の型が複数の特質を実装していることを指定する戻り値の型が特質を実装していることを指定するあれ特質のデフォルト実装特質を型に実装するimpl forメソッド記法

あれ

2022/2/26 8:51:00
fn test(closure: impl Fn(u32)->u32) {
    assert_eq!(closure(10), 11);
}

let closure = |x| {
    x+1
};

test(closure);
trait Summary {
    fn summarize(&self) -> String {
        String::from("(Read more...)")
    }
}

struct NewsArticle {
    pub headline: String,
    pub location: String,
    pub author: String,
    pub content: String,
}

impl Summary for NewsArticle {}

fn main() {
    let news_article = NewsArticle{
        headline: String::from("Headline"), 
        location: String::from("somewhere"), 
        author: String::from("somebody"), 
        content: String::from("something")
    };

    println!("{}", news_article.summarize());
}

https://doc.rust-jp.rs/book-ja/ch10-02-traits.html#デフォルト実装

trait Summary {
    fn summarize(&self) -> String;
}

struct NewsArticle {
    pub headline: String,
    pub location: String,
    pub author: String,
    pub content: String,
}

impl Summary for NewsArticle {
    fn summarize(&self) -> String {
        format!("{}, by {} ({})", self.headline, self.author, self.location)
    }
}

fn main() {
    let news_article = NewsArticle{
        headline: String::from("Headline"), 
        location: String::from("somewhere"), 
        author: String::from("somebody"), 
        content: String::from("something")
    };

    println!("{}", news_article.summarize());
}

https://doc.rust-jp.rs/book-ja/ch10-02-traits.html#トレイトを型に実装する

関連関数

2022/2/18 1:50:00

implブロック内のselfを引数に取らない関数。
Javastaticメソッドっぽさがある。

struct Rectangle {width:f64, height:f64}

impl Rectangle {
    fn square(size: f64) -> Rectangle {                             //関連関数
        Rectangle { width: size, height: size }
    }
}

fn main() {
    let rect = Rectangle::square(32.);
    println!("width: {}, height: {}", rect.width, rect.height);     //width: 32, height: 32
}

メソッド記法

2022/2/18 1:27:00
struct Body {
    weight: f64,
    height: f64,
}

impl Body {
    fn bmi_calc(&self) -> f64 {
        self.weight/(self.height*self.height)
    }
}

fn main() {
    let body = Body{weight: 60., height: 1.7};
    let bmi = body.bmi_calc();
    println!("bmi: {}", bmi);   //20.761245674740486
}