traits 相关问题

在计算机编程中,特征是一组方法,用作“构建面向对象程序的简单概念模型”

rustc 无法推断特征实现中的生命周期

我有以下代码: 无论如何使用; 结构内部值; 枚举值{ 整数(i32), 其他(内在价值), } 为 &InnerValue 实现 TryFrom<&Value> { 类型错误=无论如何::错误;...

回答 1 投票 0

如何共享相同的实现以及共享字段

如何简化这段代码?在面向对象编程之后,我仍然无法理解 Rust 的特征和结构。 结构体玩家{ 实体:实体, 马力:i32, 攻击力:i32 } 结构箱{ 实体:实体...

回答 3 投票 0

Scala 的 Mixin 特征和成员冲突问题

我对 ms Scala 测试有以下设置,其中我有一个如下所示的特征: 特征 CPODBTestContainerSpec 扩展 AnyFlatSpecLike 和 TestContainerForAll { .... .... } 抽象类...

回答 1 投票 0

Rust Book第17章的源代码可能是错误的

最初我使用本教程作为一些练习代码的参考。 经过几个小时的故障排除后,我只是简单地按原样尝试了该页面上的代码。 https://doc.rust-lang.org/book/ch17-02-trait-

回答 1 投票 0

当我将 HashMap 放入结构中时,为什么编译器会说 Hash 未实现?

我试图在我的结构中以非常基本的方式使用 HashMap,但我对这个错误感到困惑......我错过了什么? 错误[E0277]:特征绑定`HashMap<&str, &T>:Hash`未满足...

回答 1 投票 0

如何将实现多个特征的结构传递给接受这些特征作为 &mut 的函数?

我正在处理一个可以简化为以下代码的问题。结果是错误[E0499]:不能一次多次借用 *dog 作为可变对象。 我很清楚错误的根源,...

回答 1 投票 0

处理 Rust 中的未知可变性

我无法理解何时使用可变引用而不是特征中的不可变引用。 以下访客实现示例取自 Rust 设计模式: ...

回答 1 投票 0

预期关联类型,找到类型参数

我遇到了相关类型的问题...我在SO上发现了类似的问题,例如: 预期类型参数,发现不透明类型 将泛型参数与 impl 中的关联类型相匹配 ...

回答 1 投票 0

如何获取 Box 内容的可变引用<dyn T>?

说我有一个特点: 特质 ReactorClient { fn get_source(&self) -> S; } 以及接受 Box 的方法: fn 注册 说我有一个特质: trait ReactorClient<S : Source + ?Sized> { fn get_source(&self) -> S; } 还有一个接受Box的方法: fn register<S : Source + ?Sized>(&self, mut client: Box<dyn ReactorClient<S>>, token: Token, interests: Interest) -> io::Result<()> 在这个方法中,我如何从 Box<dyn ReactorClient<S>> 到 &mut S?到目前为止,每次尝试都以类似 the size of S cannot be statically determined 的方式结束。 我尝试了&mut client.get_source()、&mut client.as_mut().get_source()等 - 但没有运气。 感觉从根本上我需要做一些其他事情来避免取消引用 S? 你从根本上犯的错误是,如果你想要一个 &mut S,你实际上应该返回一个 &mut S,而不是 S。 如果您返回 S 的 owned 实例,它将不再是 ReactorClient 内部的实例。无论您围绕它写什么,例如 &mut client.get_source() 或 &mut client.as_mut().get_source() 都会改变这一事实。 因此,您应该更改的是 get_source() 函数的返回值到 &mut S。此外,您可能希望该函数为 &mut self,否则您无法真正返回 &mut S。 pub trait Source {} pub trait ReactorClient<S: Source + ?Sized> { fn get_source(&mut self) -> &mut S; } // A function that demonstrates that our API works: pub fn foo<S: Source + ?Sized>(mut obj: Box<dyn ReactorClient<S>>) { // This line demonstrates what you asked for: converting a // `Box<dyn ReactorClient<S>>` to a `&mut S` let _s: &mut S = obj.get_source(); }

回答 1 投票 0

如何在铁匠铺中添加列表不为空的约束?

如何在铁匠铺中添加列表不为空的约束? 我有一个铁匠铺清单如下 - 列出汽车列表 { 会员: 汽车 } 结构车{ @必需的 名称: 车名 } @长度(最小值:1) 圣...

回答 2 投票 0

在 Rust 中传递 ChartContext

我试图在 Rust 中重构一些重复的绘图代码,但我遇到了传递图表上下文的问题。 我写的函数如下。 酒吧 fn 情节 我正在尝试用 Rust 重构一些重复的绘图代码,但我遇到了传递图表上下文的问题。 我写的函数如下。 pub fn plot<DB: DrawingBackend, CT: CoordTranslate>( &self, chart: &mut ChartContext<DB, CT>, title: String, style: RGBColor, ) { chart .draw_series(LineSeries::new( self.xys().collect::<Vec<(f64, f64)>>(), &style, )) .unwrap() .label("Old Model") .legend(|(x, y)| PathElement::new(vec![(x, y), (x + 20, y)], &style)); } 上面是工作绘图代码的直接复制和粘贴,但我似乎无法将图表对象传递到这个函数中。具体错误是 error[E0277]: the trait bound `for<'b> &'b DynElement<'static, DB, (f64, f64)>: PointCollection<'b, <CT as CoordTranslate>::From>` is not satisfied --> src/data.rs:50:7 | 50 | .draw_series(LineSeries::new( | ^^^^^^^^^^^ the trait `for<'b> PointCollection<'b, <CT as CoordTranslate>::From>` is not implemented for `&'b DynElement<'static, DB, (f64, f64)>` | note: required by a bound in `ChartContext::<'a, DB, CT>::draw_series` --> /home/adam/.cargo/registry/src/index.crates.io-6f17d22bba15001f/plotters-0.3.5/src/chart/context.rs:126:24 | 120 | pub fn draw_series<B, E, R, S>( | ----------- required by a bound in this associated function ... 126 | for<'b> &'b E: PointCollection<'b, CT::From, B>, 我不完全确定 From 特征在我的简短代码中被调用,所以我不知道从哪里开始解决这个问题。传递此图表的正确方法是什么? 如 GitHub 上所述,From 是 CoordTranslate 上的类型参数,必须与坐标类型匹配(例如,如果图表对 x 和 y 坐标使用双精度,则为 (f64, f64))。 功能示例如下: pub fn plot<DB: DrawingBackend, CT: CoordTranslate<From = (f64, f64)>>( &self, chart: &mut ChartContext<DB, CT>, title: String, style: RGBColor, ) { chart .draw_series(LineSeries::new( self.xys().collect::<Vec<(f64, f64)>>(), style, )) .unwrap() .label(title) .legend(move |(x, y)| PathElement::new(vec![(x, y), (x + 20, y)], style.clone())); }

回答 1 投票 0

创建默认特征实现时如何避免实现冲突?

我正在尝试为 Rust 中的特征创建一个默认实现,以及仅适用于某些类型的默认实现。 假设我这里有这个 Rust 代码: 特质 Foo { fn 函数(); } 暗示 我正在尝试为 Rust 中的特征创建一个默认实现,以及仅适用于某些类型的默认实现。 假设我这里有这个 rust 代码: trait Foo { fn function(); } impl<T> Foo for T { fn function() { println!("any type") } } impl<T: From<f32>> Foo for T { fn function() { println!("only f32 related types") } } 这会导致实施上的冲突。有办法解决这个问题吗? 由于 any type 的默认实现不使用特定于该类型的任何内容,因此您可以直接在特征中定义默认实现。 这样做,您可以为自己的类型实现此特征,而无需重新定义相同的函数。 但是,对于其他类型(来自其他板条箱)来说这是不可能的,因为没有任何东西可以保证这样的类型不会在未来版本中实现From<f32>。 如果发生这种情况,两个实现将会发生冲突。 trait Foo { fn function(&self) { println!("any type") } } impl<T: From<f32>> Foo for T { fn function(&self) { println!("only f32 related types") } } struct MyType(i32); impl Foo for MyType {} fn main() { let i = 12.34_f32; i.function(); let m = MyType(123); m.function(); } /* only f32 related types any type */

回答 1 投票 0

为什么我不能将 U::from 与 T: Into<U> 约束一起使用?

我想要一个简单的类型转换,我认为代码应该如下所示: 结构摄氏度(f64); 结构华氏度(f64); impl From 为华氏度 { fn 来自(c:摄氏度)...

回答 2 投票 0

如何将 Debug 与特征对象一起使用?

我想在 Post 结构上实现 Debug 特征,该结构有一个特征对象作为值,但我从下面得到堆栈溢出错误: 线程“main”已溢出其堆栈 致命的运行时错误:

回答 1 投票 0

装箱特征如何影响传递给它的参数的生命周期? (有一个非常具体的例子)

这是一个非常简单但具体的示例,它会产生我无法理解的编译错误: 使用 std::path::Path; 特质 MyTrait { fn my_func(&self, t: T); } 结构 MyImpl {}...

回答 1 投票 0

为什么在实现 `std::ops::Add` 特性时需要类型别名?

我使用《Rust By Practice》一书练习了 Rust 编码。我遇到过一个让我有点困惑的例子。以下代码是 Traits 中第 4 个练习的修订版

回答 2 投票 0

如何在 Rust 中通过 Trait function impl 和 struct impl 消除函数调用之间的歧义?

下面的示例代码演示了两个结构体以及“本机?”的特征的实现。直接为两个结构体使用相同名称的函数 impl 。 (希望这使得......

回答 1 投票 0

如何从(仅)<T>不同的函数返回通用结构体

我正在寻求有关正确语法或 Rust 方法的帮助。我的用例:我有一个通用结构 FileData,其中有一个名为提供者的变量。提供商必须实现 AsRef<[u8]>,以便...

回答 1 投票 0

如何定义一个特征方法来获取可以是其实现者设置的类型的值?

我有一个关于特定特征的定义的问题。基本上我想定义一个特征,它提供一个函数来获取可以识别它的结构的 id (或键)。 然而,我...

回答 2 投票 0

实现一个 Rust 函数,只接受拥有某种方法的类型

我想创建一个只接受拥有某种方法的类型的函数。例如,我知道 f32 和 f64 基元类型拥有 log10 方法,因此我想要一个函数 t...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.