如何管理激增的,深层嵌套的类型参数?

时间:2019-05-21 21:13:48

标签: generics types language-agnostic type-parameter

我想知道如何管理大量深度嵌套的类型参数。代码是Scala。欢迎使用任何语言的答案。

考虑一些配置对象

trait Source
case class File(path: String) extends Source
case class URL(url: String) extends Source

trait Format
case class CSV(delimiter: String) extends Format
case class JSON extends Format

case class Data(format: Format, source: Source)

但是我的类型信息受到限制,例如我不能

def find_delimiter(config: Data) = config.format.delimiter

所以,我参数化

case class Data[F <: Format, S <: Source](format: F, source: S)

现在我可以指定我正在使用CSV

def find_delimiter[S <: Source](config: Data[CSV, S]) = config.format.delimiter

一切都很好。但是,如果我的配置对象不是一层而是四层,并且我的配置对象具有更长的名称,那么我们可以得到类似

def fn(config: DataSourceConfig[
  CSVConfig[ColumnDataTypeConfig[DeeplyNestedConfig[SuperDeeplyNestedConfig], OtherDeeplyNestedConfig]],
  URLConfig[FetchRetryConfig[HTTPDeeplyNestedConfig]]
]) = ???  // use deeply nested attributes here

一团糟,我看了参数。我该如何处理?

Afaict,类型别名会随着它们的扩散而变得不切实际。

0 个答案:

没有答案