允许静态变量和框作为函数参数?

时间:2015-10-10 07:07:32

标签: rust

我有一个结构,有时我会静态实例化,有时候我希望用户在堆上进行分配。是否可以同时允许函数作为参数?

pub struct MyData {
    x: i32
}

static ALLOCATED_STATICALLY: MyData = MyData {x: 1};

// what should my signature be?
fn use_data(instance: Box<MyData>) {
    println!("{}", instance.x);
}

fn main () {
    use_data(Box::new(MyData{x: 2}));
    // this doesn't work currently
    use_data(ALLOCATED_STATICALLY);
}

1 个答案:

答案 0 :(得分:9)

在这两种情况下,您都可以传递指向函数的指针。

pub struct MyData {
    x: i32
}

static ALLOCATED_STATICALLY: MyData = MyData { x: 1 };

// what should my signature be?
fn use_data(instance: &MyData) {
    println!("{}", instance.x);
}

fn main () {
    use_data(&Box::new(MyData{ x: 2 }));
    use_data(&ALLOCATED_STATICALLY);
}

请注意,在这两种情况下,调用者都需要使用&运算符来获取值的地址。在第一次调用中,运算符产生&Box<MyData>,但编译器会自动将其转换为&MyData,因为Box实现了Deref trait