具有选项类型的类参数是否不需要传递值?

问题描述

代码

class B(d:Int,val b:Option[Int])

object A extends App  {
  val c=new B(1)
}
@H_404_5@

在行B(1)上是错误的,我必须给值b,例如

new B(1,Some(2))
@H_404_5@

我正在研究光滑,示例代码为:

final class MessageTable1(tag: Tag) extends Table[Message](tag,"message") {
@H_404_5@

class Table位于文件main \ scala \ slick \ relational \ RelationalProfile.scala第119行:

abstract class Table[T](_tableTag: Tag,_schemaName: Option[String],_tableName: String) 
  extends AbstractTable[T](_tableTag,_schemaName,_tableName)
@H_404_5@

因此,_schemaName的类型为Option[String],但是当示例代码创建Table时,似乎没有向其传递值,仅提供了其他两个参数:{{1 }}和tag,为什么?

解决方法

Three lines down,您可以看到Table具有辅助构造函数,其中两个参数分别为TagString类型(注意:否{ {1}})

Option

这是在您显示的示例代码中调用的构造函数,而不是主构造函数。

您还可以在the documentation中看到这两个构造函数。