Collections 哈克朗—;Contindexaccess在Tk上保持不变有什么原因吗? 上下文
我正在构建一个受益于多功能集合包装器的应用程序,因此我将目光投向了Hack集合接口。其中两个特别有前途:Collections 哈克朗—;Contindexaccess在Tk上保持不变有什么原因吗? 上下文,collections,contravariance,hacklang,Collections,Contravariance,Hacklang,我正在构建一个受益于多功能集合包装器的应用程序,因此我将目光投向了Hack集合接口。其中两个特别有前途:KeyedContainer和contindexaccess。方括号访问语法允许Tk在前者中是协变的,这已被证明是非常有用的-否则getter方法将要求Tk处于参数(逆变)位置。这意味着我可以在次线性时间内访问元素(参数位置Tk),或者按照我的意愿在集合和访问键上循环(返回位置Tk)。缺点是,KeyedContainer无法有效扩展:它没有定义任何方法 目前,我需要一个具有不可变祖先的可变键控
KeyedContainer
和contindexaccess
。方括号访问语法允许Tk
在前者中是协变的,这已被证明是非常有用的-否则getter方法将要求Tk
处于参数(逆变)位置。这意味着我可以在次线性时间内访问元素(参数位置Tk
),或者按照我的意愿在集合和访问键上循环(返回位置Tk
)。缺点是,KeyedContainer
无法有效扩展:它没有定义任何方法
目前,我需要一个具有不可变祖先的可变键控集合类型。有了对KeyedContainer
的这一限制,我正在考虑放弃keyedforeach
并使用contindexaccess
,它定义了一个显式getter,并具有一个可变索引访问
子级,从中继承可变映射
和可变向量
问题
Tk
的不变性使得contindexaccess
类型的功能不那么强大,但也表明可能有某种方法可以从中读取密钥。这就是contindexaccess
在Tk
上不是逆变的原因吗?它的后代在Tk
上都不是协变的,并且不可能使用foreach
进行迭代。据我所知,所有其他标准黑客合同都有尽可能灵活的差异,除了这一个