是class参数带option类型不需要传值吗?
Is class parameters with the option type need not to pass a value?
此代码:
class B(d:Int,val b:Option[Int])
object A extends App {
val c=new B(1)
}
在第B(1)
行是错误的,我必须给出b
的值,比如
new B(1,Some(2))
我正在学习slick,示例代码为:
final class MessageTable1(tag: Tag) extends Table[Message](tag, "message") {
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)
所以_schemaName
的类型是Option[String]
,但是当示例代码创建Table
时,似乎没有给它传值,只给了另外两个参数:tag
和 "message"
,为什么?
Three lines down,可以看到Table
有一个辅助构造函数,有两个参数类型Tag
和String
(注意:这里没有Option
):
def this(_tableTag: Tag, _tableName: String) = this(_tableTag, None, _tableName)
这是您显示的示例代码中调用的构造函数,而不是主构造函数。
你还可以看到the documentation中的两个构造函数。
此代码:
class B(d:Int,val b:Option[Int])
object A extends App {
val c=new B(1)
}
在第B(1)
行是错误的,我必须给出b
的值,比如
new B(1,Some(2))
我正在学习slick,示例代码为:
final class MessageTable1(tag: Tag) extends Table[Message](tag, "message") {
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)
所以_schemaName
的类型是Option[String]
,但是当示例代码创建Table
时,似乎没有给它传值,只给了另外两个参数:tag
和 "message"
,为什么?
Three lines down,可以看到Table
有一个辅助构造函数,有两个参数类型Tag
和String
(注意:这里没有Option
):
def this(_tableTag: Tag, _tableName: String) = this(_tableTag, None, _tableName)
这是您显示的示例代码中调用的构造函数,而不是主构造函数。
你还可以看到the documentation中的两个构造函数。