问题标签 [associated-types]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
syntax - 如何指定关联类型的生命周期?
我试图让每个GraphicsContext
实现返回不同的Shader
.
这是为了让create_shader_program
方法(和其他方法)知道具体类型,Shader
以便他们可以调用着色器对象上的实现特定方法。
我不想将这些方法(例如setCurrent
or attach
)放入所有实现都必须使用的特征中。并非所有图形 API 都使用相同的系统:OpenGL 是绑定/取消绑定,Vulkan 是结构/设置字段,DirectX 是其他东西等等。
首先,我问这是构建我的引擎的正确方法。我相信在需要这些Shader
对象的框架/应用程序级代码中,我可以根据Context
.
也许:
这样的事情可能吗?希望你能看到我有点理解基本的泛型(我来自 Java),但这让我发疯了(感觉很hackish)。
如果这是正确的方法,那么我的实施就会出现问题。rustc
希望关联类型具有指定的生命周期。
我的OpenGLShader
结构实际上是 type OpenGLShader<'a>
,所以这个错误是有道理的。我的问题是我从这一堆代码中从哪里获得生命周期:
我尝试将生命周期附加到OpenGLResources
and OpenGLGraphicsContext
,这解决了错误,但随后说error: parameter 'a is never used
。
所以其次,我问我如何才能在我的关联类型中包含那个生命周期。
非常感谢,如果你能看看这个。我觉得这样的事情必须可以在编译时检查,但我对 Rust 还很陌生,所以我不太了解如何实现它。
swift - 自我作为通用回调的参数类型
我正在尝试为支持特定协议的每种类型实现通用广播功能。例如:
问题是如何bc
正确实现功能?
rust - 特征和相关类型
我正在尝试用特征和相关类型在 Rust 上实现一些东西。我不知道如何用文字来表达我的问题,所以我将添加一个代码片段,希望能说明我正在尝试做的事情。
我希望上面的代码可以编译,但事实并非如此。
相反,我得到:
其中,AFAICT 意味着编译器无法确定 person 变量具有 Person 特征。
我正在使用以下 rustc 版本:
我错过了什么吗?
rust - 如何消除关联类型的歧义?
我当前的代码如下所示:
我的目标是能够RichHasA
用作HasA
. 上面的代码无法编译:
这是有道理的。如何消除关联类型的歧义?
rust - 是否可以声明一个代表特征的关联类型?
是否可以声明一个代表特征的关联类型?如果没有,我能做些什么呢?试图做:
我遇到的最大问题是Sized
特征,因为我想要一个函数,它返回一个类型的项目向量,该类型实现ReturnType
:
选项 1 的问题是它ReturnType
不会被调整大小,因为它是一个特征,而选项 2 的问题是编译器不会将关联类型识别为特征:failed to resolve. Use of undeclared type or module 'Self'
并且use of undeclared trait name 'Self::ReturnType'
(这让我认为关联类型无法指定特征)
编辑:我正在尝试做的一个例子
用户的实现可能是
swift - 具有约束关联类型错误“类型不可转换”的 Swift 协议
我创建了 2 个具有关联类型的协议。符合 的类型Reader
应该能够产生符合 的类型的实例Value
。
复杂性层来自符合的类型Manager
应该能够产生具体Reader
实例,该实例产生特定类型的Value
(Value1
或Value2
)。
通过我的具体实现,Manager1
我希望它始终生成Reader1
,而后者又会生成Value1
.
有人可以解释为什么
“Reader1 不能转换为 ManagedReaderType?”
当错误的行更改为(现在)返回nil
时,所有编译都很好,但现在我无法实例化Reader1
or Reader2
。
可以将以下内容粘贴到 Playground 中以查看错误:
swift - 使用 Swift 在子协议中指定父协议的关联类型
在 Swift 2 中,我有一个协议:
当我想使用Protocol
而不定义要使用的类型时Type
:
然后我收到以下错误:
协议“协议”只能用作通用约束,因为它具有 Self 或关联的类型要求
很清楚为什么这不起作用。
我有另一个协议,它继承自第一个协议并指定关联类型Type
应该是String
.
当我尝试使用此协议时,也会发生同样的错误:
Protocol 'AnotherProtocol' 只能用作通用约束,因为它具有 Self 或关联的类型要求
尽管我已经指定了关联的类型,但为什么会出现错误?
第二个协议是否有另一种方法来指定父协议的关联类型,而不必在每个实现第二个协议的类中再次指定它?
rust - 对相关特征类型的限制
这是一个(有些人为的)示例来说明我想做的事情
有没有一种方法可以表达必须与 相同类型且必须与 相同类型的Graph
特征?Graph::Node
Graph::Edge::Node
Graph::Edge
Graph::Node::Edge
我记得读过一些关于一个特性(当时没有实现)的东西,它可以为这类事情提供更丰富的约束,但我不记得它的名字,也找不到它。
iterator - 带有 `&mut` 项的迭代器
我想创建一个迭代器来遍历一个大文件中的记录。
每个单独的记录都太大而无法放入内存,因此迭代器无法返回Record
所有已加载到内存中的对象。底层存储不支持随机访问,因此返回存储的“切片”/“视图”也不是一种选择。
相反,我希望迭代器返回允许使用者从文件中的当前“光标位置”读取的元素。从表面上看,API 看起来像这样:
使用 的签名next
,mut
借用确保消费者Record
在调用next()
获取“下一个”时不能保留对“上一个”的引用Record
。
但是,我无法让该类型签名next
按我想要的方式工作。该Iterator
特征需要我定义一个关联Item
类型,我不知道它应该是什么样子:
是否可以在 Rust 类型系统中表达这种约束?或者是否有另一种我没有想过的完全不同的方法?
swift - Swift - 协议中的关联类型与 where 子句?
考虑以下:
但这不会编译,因为我们不能像那样放入where
子句typealias
。
我必须在这里遗漏一些东西,因为这可以通过以下方式轻松完成type parameterization
:
什么是where
等效的子句associated type
?