zoukankan      html  css  js  c++  java
  • rust 神奇的特质

    pub trait Summary {
        fn summarize_author(&self) -> String;
    
        fn summarize(&self) -> String {
            format!("(Default Read more from {}...)", self.summarize_author())
        }
    }
    
    pub struct NewsArticle {
        pub headline: String,
        pub location: String,
        pub author: String,
        pub content: String,
    }
    
    pub struct Tweet {
        pub username: String,
        pub content: String,
        pub reply: bool,
        pub retweet: bool,
    }
    
    impl Summary for Tweet {
        fn summarize_author(&self) -> String {
            format!("@{}", self.username)
        }
    }
    
    impl Summary for NewsArticle {
        fn summarize_author(&self) -> String {
            format!("@{}", self.author)
        }
        
        fn summarize(&self) -> String {
            format!("(NewsArticle Read more from {}...)", self.summarize_author())
        }
    }
    
    impl Summary for String {
        fn summarize_author(&self) -> String {
            format!("@{}", &self)
        }
        
        fn summarize(&self) -> String {
            format!("(Read more from {}...)", self.summarize_author())
        }
    }
    
    impl Summary for i64 {
        fn summarize_author(&self) -> String {
            format!("@{}", &self)
        }
        
        fn summarize(&self) -> String {
            format!("(Read more from {}...)", self.summarize_author())
        }
    }
    
    pub fn notify(item: impl Summary) {
        println!("Breaking news! {}", item.summarize());
    }
    
    fn main(){
        let article = NewsArticle {
            headline: String::from("Penguins win the Stanley Cup Championship!"),
            location: String::from("Pittsburgh, PA, USA"),
            author: String::from("Iceburgh"),
            content: String::from("The Pittsburgh Penguins once again are the best
            hockey team in the NHL."),
        };
        
        println!("New article available! {}", article.summarize());
        notify(article);
    
        let tweet = Tweet {
            username: String::from("horse_ebooks"),
            content: String::from("of course, as you probably already know, people"),
            reply: false,
            retweet: false,
        };
        
        println!("1 new tweet: {}", tweet.summarize());
        notify(tweet);
        notify(1000);
        notify(String::from("你好,特质,你很强"));
    
    }
    

      

    使用trait,语言表达很强啊。  越来越喜欢它了。  

    总结: 任何类型都可以实现特质。 类似于接口。

  • 相关阅读:
    SQL FORMAT() 函数
    SQL ROUND() 函数
    SQL NOW() 函数
    SQL LEN() 函数
    SQL LCASE() 函数
    SQL MID() 函数
    SQL HAVING 子句
    UCASE() 函数
    SQL GROUP BY 语句
    SQL MAX() 函数
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/12896408.html
Copyright © 2011-2022 走看看