12得票1回答
如何返回一个带有通用错误的结果

我想编写一个函数来读取文件内容,如果失败则引发错误。我想从Python脚本中调用此函数,因此在下面提及Python的一些内容以便更好地理解。 正如我在评论中所示,可能会发生其他类型的错误,因此如果在Rust中可能可以使用通用的错误(?)。我如何返回错误以便可以处理它并像do_work中显示的...

11得票1回答
实现 trait 的所有类型都会生成 vtable 吗?

如果我有一个名为Foo的特质,并且一些实现者是Bar,Baz。 impl Foo for Bar { } impl Foo for Baz { } 但是假设我只使用其中一个作为特质对象, let bar = Bar {..}; let foo: &dyn Foo = &am...

11得票2回答
函数指针与Fn特质对象

fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { // definition f(arg) + f(arg) } do_twice(|x| x + 1, 5) // call 此函数接受闭包和函数指针。它以函数指针作为...

10得票2回答
理解特征和对象安全性

我在学习对象安全性的基础知识时遇到了困难。如果我有以下代码: struct S { x: i32, } trait Trait: Sized { fn f(&self) -> i32 where Self: Sized; } fn o...

9得票1回答
如何将Rc<RefCell<Box<MyStruct>>>传递给接受Rc<RefCell<Box<dyn MyTrait>>>的函数?

我最初在这里提出了这个问题,但它被标记为重复,尽管在我看来只有一部分是重复的,因此我创建了一个更具体的问题: 考虑以下代码: use std::rc::Rc; trait MyTrait { fn trait_func(&amp;self); } struct MyStruct...

8得票3回答
Rust中涉及trait对象寿命的混乱错误

有人能告诉我以下代码的问题在哪里吗?编译器报错关于生命周期的问题,但错误信息完全没有意义。我已经尝试了我能想到的所有方法,但似乎没有什么帮助。 use std::borrow::BorrowMut; trait Trait&lt;'a&gt; { fn accept(&amp;mu...

8得票2回答
当使用`Self: Sized`限定时,为什么无法调用特质对象上的函数?

我有以下代码: trait Bar { fn baz(&amp;self, arg: impl AsRef&lt;str&gt;) where Self: Sized; } struct Foo; impl Bar for Foo { fn baz...

8得票3回答
如何在Rust中按值传递一个包装的特质对象?

我正在编写一些代码,并且有一个具有通过值传递self的方法的特征。我想在Box的特征对象上调用此方法(消耗Box及其值)。这是可能的吗?如果是,怎么做? 就代码而言,一个最简示例看起来像以下不完整的代码: trait Consumable { fn consume(self) -&...

8得票1回答
为什么一个接受&dyn Display trait对象的函数不能接受一个&str?

我正在阅读一本关于Rust的书,对以下示例感到困惑: use std::fmt::Display; fn main() { test("hello"); test2("hello") } fn test(s: &amp;dyn Display) { println...

7得票1回答
为什么使用Option::map将trait对象转换为Box::new无法正常工作?

trait FooTrait {} struct FooStruct; impl FooTrait for FooStruct {} fn main() { let maybe_struct: Option&lt;dyn FooStruct&gt; = None; //...