国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Rust :mod.rs和lib.rs中use的作用

這篇具有很好參考價值的文章主要介紹了Rust :mod.rs和lib.rs中use的作用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、mod.rs和lib.rs
mod.rs往往是把同一目錄下的n個rs文件綜合在一起的有效方式;
lib.rs是一個庫或子庫層次綜合在一起的有效方式;

下面舉個實例來說明。生成一個rusttoc本地庫(由cargo new rusttoc --lib所生成),目錄結(jié)構(gòu)如下:

songroom@staff-NB-146:~/myffi/rusttoc/src$ ls -R
.:
bar  lib.rs

./bar:
data.rs  ffi.rs  mod.rs

其中,data.rs文件內(nèi)容如下:

#[derive(Debug)]
pub struct Tick;
pub trait GetBar{
    fn get_bar(&self)->Vec<Bar>;
}
#[derive(Debug)]
pub struct Bar{
    open:f64,
    close:f64,
    min:f64,
    max:f64,
}
impl Bar{
    pub fn new() ->Self{
        Bar { open: 0.0, close: 0.0, min: 0.0, max: 0.0 }
    }
}

其中,ffi.rs文件內(nèi)容如下:

use std::os::raw::{c_int,c_double};
extern "C"{
    fn abs(num:c_int) ->c_int;
    fn sqrt(x:c_double) ->c_double;
}
#[no_mangle]
pub extern "C" fn rfn_for_c(){
    println!("call from rust fn abs :{}",unsafe{abs(-6)});
    println!("call from rust fn sqrt :{}",unsafe{sqrt(36.0)});
}

此外,在上面rusttoc庫中,在src目錄下,除了有l(wèi)ib.rs文件,還有一個bar文件夾,在這個文件夾下,還有3個.rs文件,其中包括一個mod.rs文件。

很顯然,mod.rs是把data.rs和ffi.rs綜合在一起對外開放的文件。

而lib.rs是在rusttoc這個層次,綜合起來的一個對外開放的文件。

當然,如果一個庫中,包含若干個子庫,那也會存在多個不同層次的lib.rs的文件。

二、use來管理庫內(nèi)容的對外開放
在每層mod.rs和lib.rs文件中,要通過use來約束對外開放的程度和范圍。

mod.rs文件

pub mod ffi;
pub mod data;
pub use ffi::rfn_for_c;
pub use data::{Bar,GetBar};//這里設置Tick不暴露

lib.rs文件

pub mod bar;
pub use bar::*;

在mod.rs中,通過pub use來約束ffi.rs和data.rs在此庫對外開放(或暴露)的范圍,在這里為rfn_for_c函數(shù),以及Bar,以及GetBar。而沒有進來的Tick,則表明不對外開放(暴露)。
在lib.rs層次,再次明確對外開放的層次,使用use表統(tǒng)一表明,各個mod.rs或子lib.rs的統(tǒng)一對外開放。

如果沒有use安排,以上均會處于關閉狀態(tài),均無法以本地庫或外地庫的方式來調(diào)用。當然,在use前,還要聲明一下各mod。

三、另外一種方式:include
除了mod.rs,lib.rs之外,還有一種特別的導入形式,即include。它可以把不同形式文件的內(nèi)容導入到當?shù)降墓ぷ骺臻g。
下面,在test文件夾下,放了兩個不同后綴的文件。

songroom@staff-NB-146:~/myffi/test$ ls -R
.:
bind.rs  const.txt

bind.rs

#[derive(Debug)]
struct Student{
    name : String,
    age:i32,
}

const.txt

const MIN_VALUE:f64 =30000.0_f64;

四、調(diào)用庫和include導入
另一個rust 二進制工程文件中,有main.rs如下:

include!("../../test/bind.rs");
include!("../../test/const.txt");
pub use rusttoc::*;
struct Strategy;
//實現(xiàn)本地庫中的trait
impl GetBar for Strategy{
    fn get_bar(&self)->Vec<Bar>{
        vec![Bar::new()]
    }
}

fn main() {
    let student = Student{name: "wowotuo".to_string(),age:18};
    //let tick = Tick;
    let bar = Bar::new();
    let strategy = Strategy;
    println!("bar:{:?}",bar);
    println!("strategy ->get_bar:{:?}",strategy.get_bar());//調(diào)用trait
    //let tick = Tick; //因為mod.rs中沒有開放Tick的訪問權(quán)限,故不能訪問
    //println!("tick:{:?}",tick);
    println!("student :{:?}",student);
    rfn_for_c();
    println!("const :{:?}",MIN_VALUE);
    println!("Hello, world!");
}

另外,在這個工程下,cargo.toml文件應加下如下部分,表明需要導入本地庫,并指明相應的路徑:

[dependencies.rusttoc]
path = "../rusttoc" #庫的位置

這樣,就是main.rs中導入了rusttoc庫,以及include了兩個文件進來了。

songroom@staff-NB-146:~/myffi/work/src$ cargo run --release
   Compiling work v0.1.0 (/home/songroom/myffi/work)
    Finished release [optimized] target(s) in 1.68s
     Running `/home/songroom/myffi/work/target/release/work`
bar:Bar { open: 0.0, close: 0.0, min: 0.0, max: 0.0 }
strategy ->get_bar:[Bar { open: 0.0, close: 0.0, min: 0.0, max: 0.0 }]
student :Student { name: "wowotuo", age: 18 }
call from rust fn abs :6
call from rust fn sqrt :6
const :30000.0
Hello, world!

上面分別實現(xiàn)本地庫中trait,調(diào)用了const,相關函數(shù)和struct等。文章來源地址http://www.zghlxwxcb.cn/news/detail-730529.html

到了這里,關于Rust :mod.rs和lib.rs中use的作用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Rust軟件外包開發(fā)語言的特點

    Rust軟件外包開發(fā)語言的特點

    Rust 是一種系統(tǒng)級編程語言,強調(diào)性能、安全性和并發(fā)性的編程語言,適用于廣泛的應用領域,特別是那些需要高度可靠性和高性能的場景。下面和大家分享 Rust 語言的一些主要特點以及適用的場合,希望對大家有所幫助。北京木奇移動技術(shù)有限公司,專業(yè)的軟件外包開發(fā)公

    2024年02月12日
    瀏覽(23)
  • 【rust/egui】(六)看看template的app.rs:TextEdit

    【rust/egui】(六)看看template的app.rs:TextEdit

    rust新手,egui沒啥找到啥教程,這里自己記錄下學習過程 環(huán)境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:這里 文本編輯框 其定義為: 用起來可能是個簡單的東西,但是實際上很是復雜,首先我們來看看它的外觀以及用法 在 app.rs 中,我們是通

    2024年02月11日
    瀏覽(23)
  • 【rust/egui】(七)看看template的app.rs:Slider

    【rust/egui】(七)看看template的app.rs:Slider

    rust新手,egui沒啥找到啥教程,這里自己記錄下學習過程 環(huán)境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:這里 滑塊,如下圖 定義: 我們可以通過 ui.add() 的方式進行添加: 其 new 方法的定義為: 參數(shù) value 為可變借用類型,且使用 Numeric 特性進

    2024年02月10日
    瀏覽(22)
  • 【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading

    【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading

    rust新手,egui沒啥找到啥教程,這里自己記錄下學習過程 環(huán)境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:這里 側(cè)邊欄,如下圖 其定義為: 通過 right() 或 left() 方法生成: 方法實現(xiàn)與 TopBottomPanel::top() 類似: 生成時的默認屬性值為: 我們可以將

    2024年02月11日
    瀏覽(20)
  • 【rust/egui】(三)看看template的app.rs:序列化、持久化存儲

    【rust/egui】(三)看看template的app.rs:序列化、持久化存儲

    rust新手,egui沒啥找到啥教程,這里自己記錄下學習過程 環(huán)境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:這里 app.rs 中首先定義了我們的 TemplateApp 結(jié)構(gòu)體 在定義 TemplateApp 時,我們讓其繼承了 serde::Deserialize, serde::Serialize 。 serde 是rust中用于序列

    2024年02月11日
    瀏覽(20)
  • 【rust/egui】(四)看看template的app.rs:update以及組件TopBottomPanel&Button

    【rust/egui】(四)看看template的app.rs:update以及組件TopBottomPanel&Button

    rust新手,egui沒啥找到啥教程,這里自己記錄下學習過程 環(huán)境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:這里 update 實際上還是 eframe::App 的特征,并非 egui 的內(nèi)容。其官方注解如下: update 函數(shù)會在需要重繪ui(或者其他)的時候被調(diào)用,一秒可能

    2024年02月11日
    瀏覽(17)
  • 【Rust指南】use關鍵字妙用|模塊內(nèi)容拆分

    【Rust指南】use關鍵字妙用|模塊內(nèi)容拆分

    ??書接上文,本篇補充rust 組織管理中模塊的細節(jié)知識,比如模塊拆分。此外介紹 use 的習慣用法,快速引用自定義模塊內(nèi)容或標準庫,以此優(yōu)化代碼書寫。 如果我說 use 與C/C++中的 include 或者是java、python中的 import 用法類似,想必此時的你定是頭一歪,腦子里蹦出兩

    2023年04月10日
    瀏覽(19)
  • 【Java】后端開發(fā)語言Java和C#,兩者對比注解和屬性的區(qū)別以及作用

    【Java】后端開發(fā)語言Java和C#,兩者對比注解和屬性的區(qū)別以及作用

    歡迎來到《小5講堂》 大家好,我是全棧小5。 這是《Java》序列文章,每篇文章將以博主理解的角度展開講解, 特別是針對知識點的概念進行敘說,大部分文章將會對這些概念進行實際例子驗證,以此達到加深對知識點的理解和掌握。 溫馨提示:博主能力有限,理解水平有限

    2024年01月16日
    瀏覽(28)
  • 【rust語言】rust多態(tài)實現(xiàn)方式

    學習rust當中遇到了這個問題,記錄一下,不對地方望指正 多態(tài)是面向?qū)ο蟪绦蛟O計中的一個重要概念,指同一個行為或操作在不同實例上具有不同的行為或結(jié)果。簡單來說,多態(tài)就是指同一種類型的對象,在不同的上下文中有不同的行為。多態(tài)性使得程序可以更加靈活、可

    2024年02月11日
    瀏覽(27)
  • C語言和Rust語言的互相調(diào)用(2)(Rust調(diào)用C)

    1.創(chuàng)建項目 rust調(diào)用c方式挺多的,這里采用最通俗易懂的方法,用構(gòu)建腳本進行構(gòu)建整個項目。 2.編輯build.rs的內(nèi)容 這里的build.rs:若要創(chuàng)建構(gòu)建腳本,我們只需在項目的根目錄下添加一個 build.rs 文件即可。這樣一來, Cargo 就會先編譯和執(zhí)行該構(gòu)建腳本,然后再去構(gòu)建整個項

    2024年02月02日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包