【问题标题】:Replace full types by type aliases in Scaladoc在 Scaladoc 中用类型别名替换完整类型
【发布时间】:2016-10-21 10:20:41
【问题描述】:

我有一个带有 4 个类型参数的特征:Decoder[E, D, F, T](其中E 描述编码类型,D 解码类型,F 失败类型,T 是用于标记的幻像类型解码器实例)。

定义自定义Decoder 实例的每个项目还为它们定义了类型别名。例如:CellDecoder[Int]Decoder[String, Int, DecodeError, csv.type] 的类型别名。

还有一个额外的 trait,DecoderCompanion[E, F, T],它为自定义 Decoder 实例的伴随对象定义了有用的方法。因此,例如,CellDecoder 伴随对象将扩展 DecoderCompanion[String, DecodeError, csv.type]

举个具体的例子,这可能是这样的:

trait DecoderCompanion[E, F, T] {
  def apply[F](implicit dec: Decoder[E, D, F, T]): Decoder[E, D, F, T] = dec
}

object CellDecoder extends DecoderCompanion[String, DecodeResult, csv.type]

在为CellDecoder 生成 API 文档时,scaladoc 无法确定它应该用CellDecoder[D] 替换所有Decoder[String, D, DecodeResult, csv.type] 实例。读者会期望CellDecoder.apply 产生CellDecoder,而不是Decoder——他们甚至可能不知道存在这种类型。

我明白为什么,或者至少为什么这不是默认行为。我想知道是否有办法改变这种行为,无论是作为 scaladoc 标志还是类型级别的诡计?

【问题讨论】:

    标签: scala scaladoc


    【解决方案1】:

    有——但你可能不喜欢它:-)

    它涉及使用臭名昭著的 Scaladoc“用例”功能。例如,请参阅List#mapConserve 方法及其source documentation。注意到@usecase 标签了吗?这就是告诉 Scaladoc 在主概览中显示给定的“用例”类型,并在“完整签名”区域中隐藏实际类型的原因。

    【讨论】:

    • 实际上,我曾想过,但如果不重新定义我为了文档的唯一目的而继承的方法,我就找不到让它工作的方法,我觉得这是一个有点多。我错过了什么吗?
    • @NicolasRinaudo 你可能没有。我唯一能想到的就是定义CellDecoder.apply 并在实现中调用super.apply。这应该不会太繁重,因为您只需要为几个解码器伴随对象做这件事,对吧?
    • 对,但问题是我的例子被简化了,我有很多不仅仅是一种方法:)
    • @NicolasRinaudo 好的,在这种情况下,我会和 Scaladoc 的人谈谈,看看他们是否有什么袖手旁观的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2016-10-06
    相关资源
    最近更新 更多