Collections 哈克朗—;Contindexaccess在Tk上保持不变有什么原因吗? 上下文

Collections 哈克朗—;Contindexaccess在Tk上保持不变有什么原因吗? 上下文,collections,contravariance,hacklang,Collections,Contravariance,Hacklang,我正在构建一个受益于多功能集合包装器的应用程序,因此我将目光投向了Hack集合接口。其中两个特别有前途:KeyedContainer和contindexaccess。方括号访问语法允许Tk在前者中是协变的,这已被证明是非常有用的-否则getter方法将要求Tk处于参数(逆变)位置。这意味着我可以在次线性时间内访问元素(参数位置Tk),或者按照我的意愿在集合和访问键上循环(返回位置Tk)。缺点是,KeyedContainer无法有效扩展:它没有定义任何方法 目前,我需要一个具有不可变祖先的可变键控

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

目前,我需要一个具有不可变祖先的可变键控集合类型。有了对
KeyedContainer
的这一限制,我正在考虑放弃keyed
foreach
并使用
contindexaccess
,它定义了一个显式getter,并具有一个可变
索引访问
子级,从中继承
可变映射
可变向量

问题
Tk
的不变性使得
contindexaccess
类型的功能不那么强大,但也表明可能有某种方法可以从中读取密钥。这就是
contindexaccess
Tk
上不是逆变的原因吗?它的后代在
Tk
上都不是协变的,并且不可能使用
foreach
进行迭代。据我所知,所有其他标准黑客合同都有尽可能灵活的差异,除了这一个