【发布时间】:2011-02-05 07:35:09
【问题描述】:
假设你想在 Scala 中拥有类似variadic templates(为泛型类定义 n 个类型参数的能力)之类的东西。
例如,您不想定义Tuple2[+T1, +T2] 和Tuple3[+T1, +T2, +T3],而是定义Tuple[T*]。
除了HLists 之外,还有其他支持元组、产品和函数的选项吗?
【问题讨论】:
-
我假设您可以推出自己的 HList 版本,但为什么呢?您能否指出您设想的选项与 HList 有何不同?
-
用户端的类型定义对我来说有点复杂。一个理想的解决方案将允许更自然的类型定义 Tuple[T1,T2,T3] 就像 TupleX 已经在 Scala 库中所做的那样。此外,它应该支持其他类型,如 Function 和 Product。
-
但是 Scala 已经提供并且 HList 使用了一些语法糖来降低这种复杂性。例如,从 HList 链接查看此类型定义:
val list : Int :: String :: Boolean :: HNil = ...。 -
@Daniel 这实际上是我所指的复杂性。 :-) 它肯定比
HList[Int, HList[String, HList[Boolean, HNil]]]好,但从用户的角度来看Tuple3[Int, String, Boolean]更好(忽略名称中的3)。
标签: generics data-structures scala types