traits相关内容
我创建了一个两元素 Vector 结构,我想重载 + 运算符. 我让我所有的函数和方法都接受引用,而不是值,并且我希望 + 运算符以相同的方式工作. impl Add for Vector {fn add(&self, other: &Vector) ->向量{向量{x: self.x + other.x,y: self.y + other.y,}}} 根据我尝试的变化,我要么遇到生命周
..
最近的 Rust 更改使“特征对象"对我来说更加突出,但我对真正使某些东西成为特征对象的原因只有模糊的了解.一项特别的变化是 即将到来的变化,以允许 trait 对象将 trait 实现转发到内部类型. 给定一个特征 Foo,我很确定 Box/Box 是一个 trait 对象.&Foo/&dyn Foo 也是 trait 对象吗?其他诸如 Rc 或 Arc 之类的智能指针的东西呢?我怎样才能
..
根据各种来源(2ality, esdiscuss) 应该能够将 mixins 添加到类中: EDIT 发现类方法不可枚举,因此无法工作.编辑了下面的代码,但仍然没有快乐 class CartoonCharacter {构造函数(作者){this.author = 作者;}通过绘制() {console.log("绘制者", this.author);}}//这行不通//类方法不可枚举//类
..
有人能解释一下我什么时候想使用 Groovy Traits vs. Mixins (@Mixin) vs. Delegates (@Delegate)?也许一些权衡和设计问题会有所帮助. 它们似乎都允许重用多个“类"行为.谢谢.:-) 这个 SO 线程也很有帮助:@Delegate 之间的差异Groovy 中的 @Mixin AST 转换 解决方案 我同意,它们似乎都允许重用多
..
我目前正在开发一个巨大的 javascript 项目,该项目具有巨大的类层次结构,并且大量使用 mixin 来扩展基类的功能.这是 mixin 的示例,我们使用 compose library 来创建类对象: //Base.jsvar Base = compose({setX: 函数 (x) {this.x = x;},setY: 函数 (y) {这.y = y;},设置位置:函数(x,y){t
..
我知道 C# 中不存在该功能,但 PHP 最近添加了一个名为 特质 起初我觉得有点傻,直到我开始考虑它. 假设我有一个名为 Client 的基类.Client 有一个名为 Name 的属性. 现在我正在开发一个可供许多不同客户使用的可重复使用的应用程序.所有客户都同意客户应该有一个名字,因此它在基类中. 现在客户 A 过来说他还需要跟踪客户的体重.客户 B 不需要体重,但他想跟踪
..
我开始了一个新项目,我希望尽可能模块化,我的意思是我希望将来能够用其他部分替换某些部分.这似乎是 traits 的完美用法,目前我有这个代码: mod 解析器;模组渲染器;模组渲染器;使用解析器::MarkParser;使用渲染器::MarkRenderer;struct Rustmark {解析器:P,渲染器:R,}impl
..
考虑以下 Rust 代码 [游乐场]: 使用 std::collections::HashMap;使用 std::hash::Hash;特征 Foo K{const FOO: i32;}implFoo对于 HashMap在哪里K:Hash + Eq + Into,{const FOO: i32 = 1;}impl F
..
我想为 &'a str 和高达 i32 的整数实现自定义特征,但 Rust 不允许我: 使用 std::convert::Into;酒吧特质 UiId {fn push(&self);}impl'a>&'a str { 的 UiIdfn push(&self) {}}implT { 的 UiIdfn push(&self) {}}fn main() {} 编译失败,错误如下
..
我想使用 trait 来绑定泛型类型,就像这个假设的 HasSQRT: fn some_generic_function(输入:&T)在哪里T:有SQRT,{//...输入.sqrt()//...} 解决方案 您可以使用 num 或 num-traits crates 并用 num::Float, num::Integer 或任何相关特征: 使用 num::Float;//0.2.1fn
..
我有以下代码: extern crate 期货;//0.1.24使用期货::未来;使用 std::io;结构上下文;酒吧特质 MyTrait {fn 接收(上下文:上下文)->Future;}酒吧结构我的结构{我的特质:我的特质,} 当我尝试编译它时,我收到错误消息: error[E0038]: trait `MyTrait` 不能变成一个对象-->src/lib.rs:13:5|13 |我
..
我有一个如下所示的配置结构: struct Conf {列表:Vec,} 该实现在内部填充 list 成员,但现在我决定将该任务委托给另一个对象.所以我有: trait ListBuilder {fn build(&self, list: &mut Vec);}struct Conf{列表:Vec,建设者:T,}实施会议在哪里T: 大小 + ListBuilder,{fn ini
..
我想实现一个函数来计算任何通用整数类型中的位数.这是我想出的代码: extern 板条箱编号;使用 num::Integer;fn int_length(mut x: T) ->u8{如果 x == 0 {返回 1;}让 mut 长度 = 0u8;如果 x 0 {x/= 10;长度 += 1;}长度}fn 主(){println!("{}", int_length(45));println!("
..
我正在尝试将活塞纹理存储在结构中. struct TextureFactory其中 R: gfx::Resources {block_textures:Vec>,}实施 RTextureFactory其中 R: gfx::Resources {fn 新(窗口:PistonWindow)->自己 {让纹理 = Rc::new(gfx_texture::Textur
..
特征在 Rust 中似乎至少在表面上类似于 typeclasses ,但是我看到人们写道它们之间存在一些差异.我想知道这些差异到底是什么. 解决方案 在基本层面上,没有太大区别,但它们仍然存在. Haskell 将类型类中定义的函数或值描述为“方法",就像特征描述它们所包含的对象中的 OOP 方法一样.然而,Haskell 以不同的方式处理这些,将它们视为单独的值,而不是像 OOP
..
我想用 类型 T = A定义:Tt.ping} 好的,这个例子运行了,但在我的实际用例中,我想用
..
有特点 trait Persisted {定义:长} 如何实现一个方法来接受任何 case 类的实例并返回其混合了 trait 的副本? 该方法的签名如下: def toPersisted[T](instance: T, id: Long): T with Persisted 解决方案 这可以通过宏来完成(从 2.10.0-M3 开始正式成为 Scala 的一部分).这是您要查找的
..
我正在浏览 有效的 scala 幻灯片,它在幻灯片 10 中提到永远不要使用 val 在抽象成员的 trait 中,并使用 def 代替.幻灯片没有详细提到为什么在 trait 中使用抽象的 val 是一种反模式.如果有人可以解释在抽象方法的特征中使用 val 与 def 的最佳实践,我将不胜感激 解决方案 def 可以通过 def、val 中的任意一个来实现>、lazy val 或 ob
..
特征的自类型A: 特性B特性 A { 这个:B =>} 说"A不能混合到一个不扩展B"的具体类中. 另一方面,以下内容: 特性B特质 A 延伸 B 说“A 中混合的任何(具体或抽象)类也将混合在 B 中". 这两个陈述不是一个意思吗?self 类型似乎只是为了创造一个简单的编译时错误的可能性. 我错过了什么? 解决方案 主要用于依赖注入,例如在蛋糕模式中.有一篇很
..
给定一个 lambda,是否可以确定它的参数类型和返回类型?如果是,如何? 基本上,我想要 lambda_traits 可以通过以下方式使用: auto lambda = [](int i) { return long(i*10);};lambda_traits::param_type i;//我应该是intlambda_traits::return_type l;//我应该很长 背后的
..