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

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

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

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

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

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

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

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

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

trait BarPrint{
    fn print_self(&self);
}

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

我們先考慮,impl_single_bar接受單一的類(lèi)型參數(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); //這個(gè)可以放在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

這樣的確方便了一些,但是因?yàn)閰?shù)是一個(gè)個(gè)輸入,需要

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

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

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

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

1、試寫(xiě)一下生成多個(gè)類(lèi)型的宏

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

2、上面也可以跳過(guò),直接

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);
    // 測(cè)試生成多個(gè)struct Bar5,Bar6,Bar7,同時(shí)測(cè)試其實(shí)現(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相比,你可需要把多個(gè)類(lèi)型寫(xiě)到一行中就行了,即:

   impl_multi_bars!(Bar5,Bar6,Bar7);

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

您可能感興趣的文章:

相關(guān)文章

  • Rust捕獲全局panic并記錄進(jìn)程退出日志的方法

    Rust捕獲全局panic并記錄進(jìn)程退出日志的方法

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

    Rust?中的時(shí)間處理利器chrono示例詳解

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

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

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

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

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

    使用cargo install安裝Rust二進(jìn)制工具過(guò)程

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

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

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

    詳解Rust語(yǔ)言中anyhow的使用

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

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

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

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

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

    Rust中實(shí)例化動(dòng)態(tài)對(duì)象的示例詳解

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

最新評(píng)論

信阳市| 衡阳市| 麟游县| 竹北市| 外汇| 大关县| 宜章县| 扬州市| 桓仁| 外汇| 德化县| 乡城县| 社会| 麦盖提县| 牟定县| 金平| 赣州市| 蒙山县| 宁南县| 白朗县| 介休市| 南昌县| 兖州市| 普定县| 长垣县| 阜新市| 宁国市| 喀喇| 沅陵县| 德江县| 米易县| 岫岩| 万年县| 石首市| 肥东县| 义乌市| 大新县| 大化| 潜山县| 荣昌县| 长岭县|