【发布时间】:2021-06-01 06:34:37
【问题描述】:
给定一个任意元组,我想提取该元组的一个子集。 签名看起来像:
def subset[T1 <: Tuple, T2 <: Tuple](t:T1): T2 = ???
其中T2 是一个元组,其中包含从T1 中选择的一些成员子集。
使用它看起来像
subset[(String, Int, Boolean), (String, Boolean)]( ("str", 42, true) ) == ("str", true)
我知道这需要大量使用匹配类型和类型级编程。我觉得使用 Shapeless 非常简单,但我在元组与 HLIST 上缺少标准库中的一些功能。
【问题讨论】:
-
可能值得使用 Shapeless 添加您的解决方案,以便有人可以使用 Scala 3 版本进行并行处理。
-
subset[(String, String, String), (String, String)](("foo", "bar", "baz"))会是什么?("foo", "bar")? -
同一类型出现多次时不必编译。我基本上不在乎那个案子。
-
我猜这就像一个过滤器,谓词检查 T2 中是否存在每个元素类型
-
能否在您的问题中添加
subset应该如何处理subset[(Int, String), (String, Int)]和其他边缘情况?
标签: scala generics tuples shapeless scala-3