kotlin - 以大小为类型信息的 N 元组类
问题描述
我正在尝试在 Kotlin 中创建一个 N-Tuple,这意味着一个固定大小的集合/数组,它的大小作为类型信息。例子:
val tuple3 = Tuple<3>(1,2,3) //Type Tuple<3>
val tuple4 = Tuple<4>(4,5,6,7) //Type Tuple<4>
class Tuple<N>() {...}
问题是,我不能将特定数字作为泛型类型传递(例如在 typescript 或 c++ 中)。是否有某种方法可以使我没有看到或某种解决方法使此工作,告诉编译器将不同大小的元组视为不同的类型?
从 0..N-1 的范围索引也会很好:
val tuple = Tuple<3>(1,2,3)
tuple[1] //Good
tuple[14] //Error
但同样,我无法让它工作。
用例:我想在 Vector 类中实现元组:
class Vector<N>(...) : Tuple<N>(...) {...}
val vector3 = Vector(1,2,3)
val vector4 = Vector(4,5,6,7)
vector3 + vector3 //Good
vector3 + vector4 //Error
并为向量定义算术运算,例如加法。这是关于大小的类型信息很重要的地方,因为应该只能添加 2 个相同大小的向量。当然,我可以只进行运行时大小检查并抛出错误,但编译时错误将是更好的解决方案。还有其他重要的用例,其中元组/向量的大小在编译时很重要。
我不只是创建说 8 个不同的子类(如 Tuple1、Tuple2、Tuple3...)的原因是因为我可能需要任何大小的 Tuple/Vector。仅仅创建一堆子类是一个非常丑陋的解决方案。
解决方案
推荐阅读
- r - 获取 IG 用户洞察 Facebook Graph API
- python - Python pandas 以不同的方式分组
- python - 如何确定 C++ 中的向量维数?
- php - 如何在登录表单php上使用密码验证
- spring - 如何在春季数据休息中保护 RepositoryRestResource
- react-native - undefined 不是对象(评估 '_reactNative.TabBarIOS.Item')
- apache-kafka - Kafka Streams SIiding窗口实现代码示例
- java - 用户输入的 SQL 注入问题
- javascript - 如何确保下面的递归函数被解析或完成,然后进行一些操作?
- android - 为什么一个apk在模拟器和真实设备之间的jni中得到不同的签名?