3

我很难解读 Scala API 文档。

例如,我定义了一个用于数据库的时间戳。

def postedDate = column[Timestamp]("posted_date", O NotNull, O Default new Timestamp(Calendar.getInstance.getTimeInMillis), O DBType("timestamp"))

如果我没有阅读几个示例,其中没有在 API 文档中,我该如何构造这个语句?
Column文档中我怎么能知道参数?
我猜它与TimestampTypeMapperDelegate有关,但它仍然不清楚如何使用它。

4

1 回答 1

7

从 Column 的 scaladoc 中要注意的第一件事是它是抽象的,因此如果它的子类,您可能希望直接处理它。例如,命名列。

其他需要注意的是它有一个类型参数,并且构造函数采用相同参数类型的 TypeMapper 的隐式参数。TypeMapper 的文档提供了一个如何创建自定义的示例,但是如果您查看子类,则会发现很多提供的子类(例如时间戳)。参数被声明为隐式这一事实表明范围内可能存在一个,如果是这样,它将自动用作参数而无需明确说明。如果没有满足要求的隐含范围,则必须提供它。

下一个要注意的是,TypeMapper 是一个特征,它扩展了一个带有 BasicProfile 参数和 TypeMapperDelegate 结果的函数。基本上这里发生的是类型映射器的定义与实现分离。这样做是为了支持多种风格的数据库。如果看一下 BasicProfile 的子类,就会发现 ScalaQuery 支持很多,而且我们知道,它们的实现有时完全不同。

如果您追查文档一段时间,您最终会看到 BasicTypeMapperDelegates 特征,其中包含一堆 val,其中包含每种基本类型(包括时间戳)的委托。

BasicTable 定义了一个名为 column 的方法(您已经找到了),而 column 方法的目的是让您不必了解有关 TypeMappers 和 Delegates 的任何内容,只要您使用标准类型。

所以,我想回答你关于 API 文档中是否有足够信息的问题,我个人会说是的,但是可以通过更好地描述类、对象、特征和方法来增强文档。

综上所述,我一直发现利用示例、API 文档甚至项目的源代码提供了一种强大的方式来加快大多数开源项目的速度。坦率地说,其中许多项目(包括 ScalaQuery)为我节省了无数小时的工作,但可能花费了作者无数小时的个人时间来创建和提供。这些不一定是商业产品,我们作为消费者不应该将它们与我们持有的收费产品保持相同的标准。如果您发现文档不足,请贡献!

于 2012-04-29T00:59:52.040 回答