Hacklang - 为什么ConstIndexAccess在Tk上是不变的?

时间:2017-01-03 16:36:13

标签: collections contravariance hacklang

上下文

我正在构建一个受益于多功能收集包装的应用程序,因此我将目光投向了Hack收集界面。其中两个特别有前途:KeyedContainer<+Tk, +Tv>ConstIndexAccess<Tk, +Tv>。方括号访问语法允许Tk在前者中是协变的,这已证明非常有用 - 否则getter方法在参数(逆变)位置需要Tk。这意味着我可以在次线性时间(参数位置Tk)中访问元素,或者根据需要循环访问集合和访问键(返回位置Tk)。缺点是KeyedContainer无法有效扩展:它没有定义任何方法。

目前,我需要一个带有不可变祖先的可变键控集合类型。受KeyedContainer的这一限制,我考虑通过放弃密钥foreach并使用ConstIndexAccess咬住子弹,IndexAccess定义了一个明确的getter并且有一个可变的MutableMap MutableVectorTk继承的孩子。

问题

ConstIndexAccess的不变性使ConstIndexAccess类型的功能不那么强大,但也暗示可能有某种方法可以从中读取密钥。这是TkTk上不是逆变的原因吗?它的后代都不是foreach的协变,并且不可能使用dataSnapshot.getKey()进行迭代。据我所知,所有其他标准的Hack合同都有尽可能灵活的差异。

0 个答案:

没有答案