【Rust问答】跨模块如何共享变量

2019-12-17 17:10:42 浏览数 (2)

我有一个cli程序, 我在main函数中拿到用户传递的参数token, 然后我在lib.rs里面的好多函数都要用到这个参数token, 我想通过参数传递的方式好像有点繁琐, 请问各位大佬有没有优雅的方案?

main.rs

代码语言:javascript复制
fn main() {
    let token = get_token_from_user_input();
}

lib.rs

代码语言:javascript复制
pub mod A {
    pub fn a(token: String, another_parameter: String) {}
    pub fn b(token: String, another_parameter: u8) {}
}
pub mod B {
    pub fn a(token: String, another_parameter: i32) {}
    pub fn b(token: String, another_parameter: u16) {}
}

----

BBDXF 2019-12-03 17:15

共享内存

c5soft 2019-12-03 17:19

单独写一下get/set token的mod, 在需要的地方引用即可

jmjoy 2019-12-03 18:57

写个struct包含这个Token,那些函数都作为他的方法。 数据驱动还是好用的。

作者 ilp64 2019-12-03 20:04

谢谢各位大佬,用了jmjoy大佬推荐的struct的方法?

zengql 2019-12-05 17:51

不同的模块怎么用的这个struct,没想到

作者 ilp64 2019-12-06 13:10

哦,我这个是相当于只需要在main和模块里面共享,不需要模块和模块共享,所以就用了下面这种方法

main.rs

代码语言:javascript复制
use project::Ha;

fn main() {
    let h = Ha::new(String::from("token"));
    h.a();
}

lib.rs

代码语言:javascript复制
pub struct Ha {
    token: String
}

impl Ha {
    pub fn new(token: String) -> Ha {
        Ha {
           token
        }
    }
    pub fn a(&self) {
        println!("{}", self.token)
    }
}

0 人点赞