Проблемы Scala с slick 2, когда класс корпуса и имя объекта совпадают

Ну, у меня есть некоторые проблемы с именами классов, вот моя проблема

У меня есть такой класс случая,

case class Foo(
  val compositeKey: String, // clientId-now-requestId
  val requestPath: String,
  val requestStatus: String) {

  def this() = this("", "", "")
  def someData = this.compositeKey.split("-")(0)
  def someData2 = this.compositeKey.split("-")(2)
}

И класс Projection для Slick,

class Foos(tag: Tag) extends Table[Foo](tag, "Foo") {

  def compositeKey: Column[String] = column[String]("composite_key", O.PrimaryKey)
  def requestPath: Column[String] = column[String]("request_path")
  def requestStatus: Column[String] = column[String]("request_status")
  def * : ProvenShape[ClientApiLog] = (compositeKey, requestPath, requestStatus) <> (Foo.tupled, Foo.unapply) //Error is thrown in this line
}

И, к сожалению, имя класса случая == объект

object Foo {
.
.
.
}

Это старый код, а класс case и объект использовались во многих местах, поэтому я не могу изменить имя класса case или объекта, и, поскольку они имеют одно и то же имя, у меня возникают проблемы с созданием класса проекции, Я получаю ошибки в этой строке:

def * : ProvenShape[Foo] = (compositeKey, requestPath, requestStatus) <> (Foo.tupled, Foo.unapply)

- Implicit conversions found: (compositeKey, requestPath, requestStatus) => anyToToShapedValue((compositeKey, requestPath, 
 requestStatus))
- value tupled is not a member of object models.Foo
- implements scala.slick.lifted.AbstractTable.$times

И когда я меняю имя класса случая и использую его в классе проекции, он работает правильно, у меня возникает эта проблема, потому что класс случая и объект имеют одно и то же имя. Есть ли какое-то решение этой проблемы, можно ли ее решить без изменения имени класса/объекта??


person mane    schedule 06.08.2014    source источник
comment
Вы можете попробовать добавить полный путь к классу, если оба импортируются в один и тот же файл: (package.path.to.Foo.tupled, package.path.to.Foo.unapply)   -  person Ende Neu    schedule 06.08.2014
comment
Даже если я укажу полный путь, это будет то же самое, потому что класс объекта и класса имеют одно и то же имя, а объект имеет приоритет над классом случая. Дело в том, что и класс case, и объект, и класс проекции находятся в одном файле и не могут изменить расположение класса case и объекта.   -  person mane    schedule 06.08.2014
comment
Ах, извините, я думал, что они определены в разных файлах и поэтому у них разные имена пакетов, это плохо. Еще одна вещь, которую вы, вероятно, могли бы попробовать, это изменить имя объекта в импорте, например этот вопрос показывает, этого должно быть достаточно, чтобы избежать конфликтов.   -  person Ende Neu    schedule 06.08.2014
comment
Да, я сделал то, что вы предложили, но, к сожалению, снова объект имеет приоритет над классом case.   -  person mane    schedule 06.08.2014


Ответы (1)


Вы можете попробовать так

(Foo.apply _).tupled
person Uraniium    schedule 06.08.2014