#scala #slick
#scala #скользкий
Вопрос:
этот код:
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") {
таблица класса находится в файле mainscalaslickrelationalRelationalProfile.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"
, почему?
Ответ №1:
Тремя строками ниже вы можете видеть, что у Table
есть вспомогательный конструктор с двумя параметрами типа Tag
и String
(примечание: здесь их нет Option
):
def this(_tableTag: Tag, _tableName: String) = this(_tableTag, None, _tableName)
Это конструктор, который вызывается в показанном вами примере кода, а не основной конструктор.
Вы также можете увидеть два конструктора в <a rel="noreferrer noopener nofollow" href="https:///scala-slick.org/doc/3.3.1/api/index.html#slick.relational.RelationalTableComponent$Table@(_tableTag:slick.lifted.Tag,_tableName:String):RelationalTableComponent.this.Table[T]» rel=»nofollow noreferrer»>документации.