最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rust聲明宏在不同K線bar類型中的應(yīng)用小結(jié)

 更新時間:2024年05月11日 11:01:53   作者:songroom  
在K線bar中,往往有很多不同分時k線圖,比如1,2,3,5,,,,,60,120,250,300…,,不同分鐘類型,如果不用宏,那么手寫會比較麻煩,下面就試用一下宏來實現(xiàn)不同類型的bar,感興趣的朋友一起看看吧

Rust的宏功能博大精深。在K線bar中,往往有很多不同分時k線圖,比如1,2,3,5,。。。。60,120,250,300…。。不同分鐘類型。
如果不用宏,那么手寫會比較麻煩。下面就試用一下宏來實現(xiàn)不同類型的bar.

一、數(shù)據(jù)和功能

bar的結(jié)構(gòu)

為了簡單起見,我們把不同分時的Bar抽象成下面的結(jié)構(gòu)。

 struct Bar{
     open :f64,
     close:f64,
     high:f64,
     low:f64,
 }

同時這個結(jié)構(gòu)要實現(xiàn)一個trait

trait BarPrint{
    fn print_self(&self);
}

二、單一bar的實現(xiàn)

我們先考慮,impl_single_bar接受單一的類型參數(shù),比如Bar1,Bar3,Bar5,…

trait BarPrint{
    fn print_self(&self);
}
// Bar1,Bar2,Bar3,Bar5,Bar10,Bar15,Bar30,Bar45,Bar60,.....
macro_rules!  impl_single_bar {
    ($bar:ident) => (
        #[derive(Debug)]
        struct $bar{
            open:f64,
            close:f64,
            high:f64,
            low:f64,
        }
        impl $bar{
            fn new() -> Self{
                $bar{
                    open:0.0,
                    close:0.0,
                    high:0.0,
                    low:0.0,
               }
            }
        }
        impl BarPrint for $bar {
            fn print_self(&self){
                println!("impl_single_bar =>close:{:?} open: {:?}, high:{:?}, low:{:?}",&self.close,&self.open,&self.high,&self.low);
            }
        }
    );
}
fn main(){
    impl_single_bar!(Bar1); //這個可以放在main()函數(shù)外,不影響
    let  bar = Bar1::new();
    println!("bar:{:?}",bar);
    bar.print_self(); 
    impl_single_bar!(Bar2);
    let  bar2 = Bar2::new();
    println!("bar:{:?}",bar2);
    bar2.print_self(); 
}

輸出:

bar:Bar1 { open: 0.0, close: 0.0, high: 0.0, low: 0.0 }
impl_single_bar =>close:0.0 open: 0.0, high:0.0, low:0.0
bar:Bar2 { open: 0.0, close: 0.0, high: 0.0, low: 0.0 }
impl_single_bar =>close:0.0 open: 0.0, high:0.0, low:0.0

這樣的確方便了一些,但是因為參數(shù)是一個個輸入,需要

impl_single_bar!(Bar1);
impl_single_bar!(Bar2);

每一個類型,寫一行函數(shù),還是不太方便。
注意:
1、impl_single_bar!(Bar1),可以放在main()函數(shù)外,不受影響;
2、$bar:ident,也可以是 $bar:tt。tt是分語樹,比ident概念要大。

三、實現(xiàn)多類型參數(shù)輸入

這里就需要用到rust宏的重復(fù)的寫法。這里不特別展開,相關(guān)的資料很多。

1、試寫一下生成多個類型的宏

macro_rules! create_bars{
    ($($bar:ident),*) => {
        $(
            #[derive(Debug)]
            struct $bar{
                open:f64,
                close:f64,
                high:f64,
                low:f64,
            }
        )*
    }
}

2、上面也可以跳過,直接

trait BarPrint{
    fn print_self(&self);
}
macro_rules! impl_multi_bars{
    ($($bar:ident),*) => {
        $(
            #[derive(Debug)]
            struct $bar{
                open:f64,
                close:f64,
                high:f64,
                low:f64,
            }
            impl $bar{
                fn new() -> Self{
                    $bar{
                        open:0.0,
                        close:0.0,
                        high:0.0,
                        low:0.0,
                    }
                }
            }
            impl BarPrint for $bar {
                fn print_self(&self){
                    println!("impl_multi_bars => close:{:?} open: {:?}, high:{:?}, low:{:?}",&self.close,&self.open,&self.high,&self.low);
                }
            }
        )*
    }      
}
fn main(){
    create_bars!(Bar3,Bar4);
    let bar3 =Bar3{open:0.0,close:0.0,high:0.0,low:0.0};
    println!("bar3:{:?}",bar3);
    let bar4 =Bar4{open:0.0,close:0.0,high:0.0,low:0.0};
    println!("bar4:{:?}",bar4);
    // 測試生成多個struct Bar5,Bar6,Bar7,同時測試其實現(xiàn)的方法
    impl_multi_bars!(Bar5,Bar6,Bar7);//可以放在main()函數(shù)外,在main()函數(shù)內(nèi),直接調(diào)用即可。
    let  bar5 = Bar5::new();
    println!("bar5:{:?}",bar5);
    bar5.print_self();
}

輸出:

bar3:Bar3 { open: 0.0, close: 0.0, high: 0.0, low: 0.0 }
bar4:Bar4 { open: 0.0, close: 0.0, high: 0.0, low: 0.0 }
bar5:Bar5 { open: 0.0, close: 0.0, high: 0.0, low: 0.0 }
impl_multi_bars => close:0.0 open: 0.0, high:0.0, low:0.0

和2相比,你可需要把多個類型寫到一行中就行了,即:

   impl_multi_bars!(Bar5,Bar6,Bar7);

到此這篇關(guān)于Rust聲明宏在不同K線bar類型中的應(yīng)用小結(jié)的文章就介紹到這了,更多相關(guān)Rust聲明宏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Rust捕獲全局panic并記錄進程退出日志的方法

    Rust捕獲全局panic并記錄進程退出日志的方法

    本文提供了捕獲全局panic并記錄進程退出日志的方法,首先使用 panic::set_hook 注冊異常處理及panic 觸發(fā)異常,結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Rust?中的時間處理利器chrono示例詳解

    Rust?中的時間處理利器chrono示例詳解

    chrono是一個功能強大且易于使用的日期時間處理庫,支持多種日期時間類型、時區(qū)操作、格式化和解析,這篇文章主要介紹了Rust中的時間處理利器chrono,需要的朋友可以參考下
    2025-06-06
  • 為什么要使用 Rust 語言、Rust 語言有什么優(yōu)勢

    為什么要使用 Rust 語言、Rust 語言有什么優(yōu)勢

    雖然 Rust 是一種通用的多范式語言,但它的目標(biāo)是 C 和 C++占主導(dǎo)地位的系統(tǒng)編程領(lǐng)域,很多朋友會問rust語言難學(xué)嗎?rust語言可以做什么,今天帶著這些疑問通過本文詳細(xì)介紹下,感興趣的朋友一起看看吧
    2022-10-10
  • 一文掌握Rust編程中的生命周期

    一文掌握Rust編程中的生命周期

    在Rust語言中, 每一個引用都有其生命周期, 通俗講就是每個引用在程序執(zhí)行的過程中都有其自身的作用域, 一旦離開其作用域, 其生命周期也宣告結(jié)束, 值不再有效,這篇文章主要介紹了Rust編程中的生命周期,需要的朋友可以參考下
    2023-11-11
  • 使用cargo install安裝Rust二進制工具過程

    使用cargo install安裝Rust二進制工具過程

    cargoinstall是一個用于安裝包含可執(zhí)行目標(biāo)的Rust包的命令行工具,類似于系統(tǒng)軟件包管理器,但它為Rust開發(fā)者提供了一種簡潔的方式來安裝和管理命令行工具,安裝后,二進制文件會存儲在$HOME/.cargo/bin目錄中,需要將該目錄添加到$PATH環(huán)境變量中才能在命令行中直接運行
    2025-02-02
  • 在Rust應(yīng)用中訪問.ini格式的配置文件方式

    在Rust應(yīng)用中訪問.ini格式的配置文件方式

    Rust應(yīng)用中訪問.ini格式的配置文件,可以使用ini或config庫,以ini庫為例,在Cargo.toml中添加依賴,然后在代碼中讀取和解析ini文件,確保配置文件路徑正確,使用section和get方法訪問配置值
    2025-02-02
  • 詳解Rust語言中anyhow的使用

    詳解Rust語言中anyhow的使用

    anyhow是一個Rust庫,用于簡化錯誤處理和提供更好的錯誤報告,這個庫適合用于應(yīng)用程序,而不是用于創(chuàng)建庫,因為它提供了一個非結(jié)構(gòu)化的,方便使用的錯誤類型,本文就給大家講講Rust語言中anyhow的使用,需要的朋友可以參考下
    2023-08-08
  • Rust使用Trait對象實現(xiàn)多態(tài)的詳細(xì)步驟

    Rust使用Trait對象實現(xiàn)多態(tài)的詳細(xì)步驟

    本文詳細(xì)介紹了在Rust中使用Trait對象實現(xiàn)運行時多態(tài)的方法,通過一個圖形渲染系統(tǒng)的案例展示了如何統(tǒng)一管理不同類型的圖形對象,文章涵蓋了Trait對象的核心概念、語法、性能考量以及在實際項目中的應(yīng)用場景,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 如何使用rust實現(xiàn)簡單的單鏈表

    如何使用rust實現(xiàn)簡單的單鏈表

    實現(xiàn)單鏈表在別的語言里面可能是一件簡單的事情,單對于Rust來說,絕對不簡單,下面這篇文章主要給大家介紹了關(guān)于如何使用rust實現(xiàn)簡單的單鏈表的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • Rust中實例化動態(tài)對象的示例詳解

    Rust中實例化動態(tài)對象的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Rust中實例化動態(tài)對象的多種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02

最新評論

界首市| 景宁| 敦煌市| 江孜县| 静海县| 满城县| 乐平市| 溧水县| 明水县| 无锡市| 游戏| 通海县| 德江县| 浪卡子县| 隆安县| 鄱阳县| 北宁市| 镇巴县| 南昌市| 平谷区| 若尔盖县| 荥经县| 启东市| 天水市| 镇雄县| 泰宁县| 泾川县| 上饶市| 且末县| 长乐市| 合山市| 定州市| 宿迁市| 治县。| 丘北县| 泰州市| 黄冈市| 焉耆| 怀集县| 额敏县| 盐山县|