问题标签 [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.

0 投票
1 回答
539 浏览

syntax - 如何指定关联类型的生命周期?

我试图让每个GraphicsContext实现返回不同的Shader.

这是为了让create_shader_program方法(和其他方法)知道具体类型,Shader以便他们可以调用着色器对象上的实现特定方法。

我不想将这些方法(例如setCurrentor attach)放入所有实现都必须使用的特征中。并非所有图形 API 都使用相同的系统:OpenGL 是绑定/取消绑定,Vulkan 是结构/设置字段,DirectX 是其他东西等等。

首先,我问这是构建我的引擎的正确方法。我相信在需要这些Shader对象的框架/应用程序级代码中,我可以根据Context.

也许:

这样的事情可能吗?希望你能看到我有点理解基本的泛型(我来自 Java),但这让我发疯了(感觉hackish)。

如果这是正确的方法,那么我的实施就会出现问题。rustc希望关联类型具有指定的生命周期。

我的OpenGLShader结构实际上是 type OpenGLShader<'a>,所以这个错误是有道理的。我的问题是我从这一堆代码中从哪里获得生命周期:

我尝试将生命周期附加到OpenGLResourcesand OpenGLGraphicsContext,这解决了错误,但随后说error: parameter 'a is never used

所以其次,我问我如何才能在我的关联类型中包含那个生命周期

非常感谢,如果你能看看这个。我觉得这样的事情必须可以在编译时检查,但我对 Rust 还很陌生,所以我不太了解如何实现它。

0 投票
1 回答
997 浏览

swift - 自我作为通用回调的参数类型

我正在尝试为支持特定协议的每种类型实现通用广播功能。例如:

问题是如何bc正确实现功能?

0 投票
2 回答
313 浏览

rust - 特征和相关类型

我正在尝试用特征和相关类型在 Rust 上实现一些东西。我不知道如何用文字来表达我的问题,所以我将添加一个代码片段,希望能说明我正在尝试做的事情。

我希望上面的代码可以编译,但事实并非如此。

相反,我得到:

其中,AFAICT 意味着编译器无法确定 person 变量具有 Person 特征。

我正在使用以下 rustc 版本:

我错过了什么吗?

0 投票
1 回答
4598 浏览

rust - 如何消除关联类型的歧义?

我当前的代码如下所示:

我的目标是能够RichHasA用作HasA. 上面的代码无法编译:

这是有道理的。如何消除关联类型的歧义?

0 投票
1 回答
788 浏览

rust - 是否可以声明一个代表特征的关联类型?

是否可以声明一个代表特征的关联类型?如果没有,我能做些什么呢?试图做:

我遇到的最大问题是Sized特征,因为我想要一个函数,它返回一个类型的项目向量,该类型实现ReturnType

选项 1 的问题是它ReturnType不会被调整大小,因为它是一个特征,而选项 2 的问题是编译器不会将关联类型识别为特征:failed to resolve. Use of undeclared type or module 'Self'并且use of undeclared trait name 'Self::ReturnType'(这让我认为关联类型无法指定特征)

编辑:我正在尝试做的一个例子

用户的实现可能是

0 投票
1 回答
5600 浏览

swift - 具有约束关联类型错误“类型不可转换”的 Swift 协议

我创建了 2 个具有关联类型的协议。符合 的类型Reader应该能够产生符合 的类型的实例Value

复杂性层来自符合的类型Manager应该能够产生具体Reader实例,该实例产生特定类型的ValueValue1Value2)。

通过我的具体实现,Manager1我希望它始终生成Reader1,而后者又会生成Value1.

有人可以解释为什么

“Reader1 不能转换为 ManagedReaderType?”

当错误的行更改为(现在)返回nil时,所有编译都很好,但现在我无法实例化Reader1or Reader2

可以将以下内容粘贴到 Playground 中以查看错误:

0 投票
1 回答
1529 浏览

swift - 使用 Swift 在子协议中指定父协议的关联类型

在 Swift 2 中,我有一个协议:

当我想使用Protocol而不定义要使用的类型时Type

然后我收到以下错误:

协议“协议”只能用作通用约束,因为它具有 Self 或关联的类型要求

很清楚为什么这不起作用。


我有另一个协议,它继承自第一个协议并指定关联类型Type应该是String.

当我尝试使用此协议时,也会发生同样的错误:

Protocol 'AnotherProtocol' 只能用作通用约束,因为它具有 Self 或关联的类型要求

尽管我已经指定了关联的类型,但为什么会出现错误?

第二个协议是否有另一种方法来指定父协议的关联类型,而不必在每个实现第二个协议的类中再次指定它?

0 投票
1 回答
7399 浏览

rust - 对相关特征类型的限制

这是一个(有些人为的)示例来说明我想做的事情

有没有一种方法可以表达必须与 相同类型且必须与 相同类型的Graph特征?Graph::NodeGraph::Edge::NodeGraph::EdgeGraph::Node::Edge

我记得读过一些关于一个特性(当时没有实现)的东西,它可以为这类事情提供更丰富的约束,但我不记得它的名字,也找不到它。

0 投票
0 回答
45 浏览

iterator - 带有 `&mut` 项的迭代器

我想创建一个迭代器来遍历一个大文件中的记录。

每个单独的记录都太大而无法放入内存,因此迭代器无法返回Record所有已加载到内存中的对象。底层存储不支持随机访问,因此返回存储的“切片”/“视图”也不是一种选择。

相反,我希望迭代器返回允许使用者从文件中的当前“光标位置”读取的元素。从表面上看,API 看起来像这样:

使用 的签名nextmut借用确保消费者Record在调用next()获取“下一个”时不能保留对“上一个”的引用Record

但是,我无法让该类型签名next按我想要的方式工作。该Iterator特征需要我定义一个关联Item类型,我不知道它应该是什么样子:

是否可以在 Rust 类型系统中表达这种约束?或者是否有另一种我没有想过的完全不同的方法?

0 投票
1 回答
1278 浏览

swift - Swift - 协议中的关联类型与 where 子句?

考虑以下:

但这不会编译,因为我们不能像那样放入where子句typealias

我必须在这里遗漏一些东西,因为这可以通过以下方式轻松完成type parameterization

什么是where等效的子句associated type