问题标签 [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 投票
3 回答
317 浏览

c++ - 是否有 decltype 的快捷方式

这个答案中,我编写了 C++17 代码:

这收到了一些关于 C++ 类型关联性质的负面评论,我很遗憾地说我同意:(

decay_t<decltype(numbers[0])>{}是一种非常复杂的方法来获得:

元素的零初始化类型numbers

是否可以保持与numbers' 元素类型的关联,但不能输入 30 个字符来获取它?

编辑:

我有很多答案都涉及到包装器accumulate或从numbers[0]. 问题是它们需要读者导航到次要位置以阅读与初始化代码一样复杂的解决方案decay_t<decltype(numbers[0])>{}

我们必须做更多的唯一原因是:decltype(numbers[0])因为数组下标运算符返回一个引用:

错误:将“int”类型的右值表达式无效转换为“int&”类型

有趣的是,关于decltype' 的论点:

如果对象的名称带括号,则将其视为普通的左值表达式

但是,decltype((numbers[0]))仍然只是对 的一个元素的引用numbers。所以最后这些答案可能与我们可以简化这个初始化一样接近:(

0 投票
0 回答
66 浏览

swift - 显式指定关联类型

在以下示例中,我的“类型”有一个“选项”。由于泛型部分中的 where 子句,我通过确保它们是连贯的,在 Field 结构中使用它们。

它工作正常。但是 typeOption 属性是没用的。事实上,我只是把它放在了 Option 的类型上,就像 String 的扩展示例一样。

所以我的问题是,我可以摆脱这个无用的属性,或者换句话说,我可以明确指定关联的类型吗?

0 投票
1 回答
2730 浏览

swift - Swift 关联类型和协议继承

我正在使用 Swift 2.2,并声明了一个关联类型的协议,如下所示:

现在我有一个符合上述协议的视图模型协议:

最后,在其他地方,我想声明一个符合 le 协议 ItemsListViewModeling 的 var:

我收到了这个错误:

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

但是我可以很容易地创建一个实现这个协议的类。

是否可以将 var 声明为关联的类型化协议?当我在协议 ItemsListViewModeling 中给出关联类型的最终类型时,我不明白为什么我会从编译器中看到这个错误。

谢谢

0 投票
2 回答
1250 浏览

swift - 使用动态协议类型进行 Swift 动态类型初始化

我有许多实现Resource协议的结构。这定义了它们必须有一个extendedInfo符合ExtendedInfo协议的变量,以提供一种通过 json 初始化它们的方法init(json: [String: AnyObject]。我试图提供一种使用 JSON 动态实例化这些的方法,提供正确的类型ExtendedInfo并将其分配给结构的extendedInfo变量。但是,Argument labels '(json:)' do not match any available overloads尝试通过它们的实例化它们时出现错误dynamicType

有什么想法吗?谢谢

0 投票
1 回答
822 浏览

swift - 实现具有不同关联类型的协议

我有一个协议我的 swift 代码库我有一个带有关联类型和两种方法的协议。这两种方法都为协议的关联类型定义了不同的通用约束。我想让结构符合两个协议,但有两种不同的关联类型。

作为扩展,我使结构符合TargetType将要使用的协议,String以便将其传递给 show 方法:

到目前为止,一切都按预期工作。但是现在我也希望结构体在绑定到 IntConvertable时符合协议。TargetType这似乎是不可能的?

我尝试的第一件事是将 convert 方法的第二个定义添加到扩展中:

编译器现在抱怨MyData不再符合协议。其次是将其拆分为两个扩展并显式绑定 TargetType。

这具有编译器现在抱怨 theTargetType被重新定义的效果。

我最后一次尝试是定义两个扩展Convertable协议并约束它们的协议TargetType,然后通过扩展实现它们:

这现在使编译器对扩展感到高兴,但不再对调用感到高兴,show因为它不知道它可以使用MyData.

有没有我监督过的事情,或者这目前是不可能的?

0 投票
1 回答
1373 浏览

swift - 如何使协议关联类型需要协议继承而不是协议采用

在我的 swift 项目中,我有一个使用协议继承的情况,如下所示

我接下来要实现的是声明另一个具有关联类型的协议,该类型必须继承自协议A。如果我尝试将其声明为:

AnotherProtocol它编译时没有错误,但在以下情况下尝试采用时:

编译失败,错误声明SomeClass不符合AnotherProtocol. 如果我理解正确,这意味着在我尝试声明并询问您如何声明从协议继承的关联类型时B 不采用?AA

我基于以下场景编译得很好的事实做出了上述假设

0 投票
2 回答
173 浏览

swift - Swfit 关联类型编译错误

我正在阅读 Apple 出版的 Swift 书籍。我有 XCode 7.2.1 下面的代码给出了编译错误。我在操场上使用了代码。

您可以在页面的后半部分看到代码。

这是错误: 在此处输入图像描述

我不确定这是否是对代码的正确更改;但是当我将协议中的第一行从

错误消失了。

0 投票
1 回答
299 浏览

rust - 实现具有关联特征类型的特征

我在学习关联类型时遇到了麻烦。我的问题代码:

播放链接

这里的目的是使用关联类型来使FooStore特征不需要笨拙和有问题的语法,impl<F:Fooer, T: FooStore<F>> FooStore<F> for DB因为这经常抱怨F没有被使用。

但是,有关此功能的官方文档显示了实现底层关联类型的对象 - 但不是特征。在这个例子中,DB不知道可能会传入什么结构体store_foo(..),所以它需要使用一个 trait 来解决这个问题。

话虽如此,我怎样才能让关联类型在 期间使用特征impl?也就是说,我该怎么写type T = Fooer;?还是我以某种方式使用了这个错误?

注意:我在构建这个例子时遇到了一些麻烦,我现在正在尝试纠正这个问题。我遇到的错误是:

0 投票
2 回答
6331 浏览

ios - 无法在 Swift 的另一个协议中使用协议作为关联类型

我有一个协议,Address它继承自另一个协议,ValidatorAddress满足Validator扩展中的要求。

还有另一个协议 ,FromRepresentable它有一个associatedType( ValueWrapper) 要求,应该是Validator

现在如果我尝试使用Addressas associatedType,那么它不会编译。它说,

推断类型“地址”(通过匹配要求“valueForDetail”)无效:不符合“验证器”。

这种用法违法吗?我们不应该像所有Address的那样使用.ValidatorAddressesValidator

下面是我正在尝试的一段代码。

更新:提交了一个错误。

0 投票
1 回答
185 浏览

arrays - 如何使用关联类型和数组对协议进行扩展

假设我有这些协议

和两个功能

我扩展了协议M

当我打电话f(view时它有效。但是当我打电话时g(views)它显示错误

无法将类型“[Self.Action]”的值转换为预期的参数类型“[Actionable]”

这里g接受一个数组而不是像f. 为什么在这种情况下数组很重要?如何解决这个问题?

作为旁注,这似乎也是泛型结构的错误