【问题标题】:Emulating variadic templates in Scala在 Scala 中模拟可变参数模板
【发布时间】: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


【解决方案1】:

目前,Scala 中没有允许您所建议的语法结构。这也是为什么有 22 个 Tuple 类(Tuple2、Tuple3、...、Tuple22)和不同的 Function 类(Function0、...)的原因。

【讨论】:

  • 这个问题暗示没有语言结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2013-09-14
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
相关资源
最近更新 更多