我想知道如何管理大量深度嵌套的类型参数。代码是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,类型别名会随着它们的扩散而变得不切实际。