首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将字符串生存期传递给Box<dyn Fn()>

将字符串生命周期传递给Box<dyn Fn()>可以通过使用static关键字来解决。static关键字用于声明全局静态变量,其生命周期为整个程序的运行期间。

在Rust中,Box<dyn Fn()>表示一个指向实现了Fn() trait的动态分发闭包的堆分配的指针。由于闭包是动态分发的,它的大小在编译时是未知的,因此需要将其放在堆上。

要将字符串生命周期传递给Box<dyn Fn()>,可以使用static关键字声明一个静态字符串,并将其传递给闭包。这样,闭包就可以在整个程序的生命周期内访问该字符串。

以下是一个示例代码:

代码语言:txt
复制
static MY_STRING: &str = "Hello, world!";

fn main() {
    let my_closure: Box<dyn Fn()> = Box::new(|| {
        println!("{}", MY_STRING);
    });

    my_closure();
}

在上面的代码中,我们声明了一个静态字符串MY_STRING,并将其传递给闭包my_closure。闭包可以在整个程序的生命周期内访问MY_STRING并打印它。

请注意,这只是一个示例,实际应用中可能需要根据具体情况进行适当的调整和修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

揭开智能指针 Box 的神秘面纱

同时 Box 也实现了 trait Deref 解引用和 Drop 析构,当 Box 离开作用域时自动释放空间 入门例子 例子来自 the rust book, 为了演示方便,去掉打印语句 fn main...关键点就两条,alloc::alloc::exchange_malloc 在堆上分配内存空间,然后将 0x11223344 存储到这个 malloc 的地址上 函数结束时,将地址传递给 core::ptr...("x is {}", x); } 这个例子中将字符串装箱,其实没必要这么写,因为 String 广义来讲本身就是一种智能指针。...当你有大量数据,需要移动所有权,而不想 copy 数据的时候 trait 对象,或者称为 dyn 动态分发常用在一个集合中存储不同的类型上,或者参数指定不同的类型 官网有一个链表的实现 enum List...:{Cons, Nil}; fn main() { let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil)))))

54220

trait 对象的静态分发与动态分发

对于某个 trait MyTrait,以下东西都是 trait 对象 [3]: dyn MyTrait dyn MyTrait + Send dyn MyTrait + Send + Sync dyn...MyTrait + 'static dyn MyTrait + Send + 'static dyn MyTrait + dyn 'static + MyTrait dyn (MyTrait) 动态分发也就是运行时范型...对象隐藏在指针后(如 &dyn Trait,Box,Rc 等),编译器编译时会默认对象实现了 trait,并在运行时动态加载调用的对应函数。...fn get_runnable(runnable: &dyn Run) { runnable.run(); } 动态分发靠的就是指向 trait 对象的指针。...其实 rust 中 str 字符串类型和 [T] 数组类型都是 trait 对象。 对象安全 trait 对象一定要基于 对象安全 的 trait,这里不大谈特谈,只简单提及两个有趣的地方。

9110
领券