Używam.metoda krotkowa, gdy obiekt towarzyszący jest w klasie

Jestem w trakcie migracji z Slick do Slick 2, a w Slick 2 powinieneś użyć metody tupled podczas rzutowania na klasę case (jak pokazano tutaj http://slick.typesafe.com/doc/2.0.0-RC1/migration.html )

Problem polega na tym, że Klasa case ma obiekt towarzyszący, tzn. jeśli masz coś takiego

case class Person(firstName:String, lastName:String) {

}

Wraz z obiektem towarzyszącym

object Person {
  def something = "rawr"
}

W tym samym zakresie metoda tupled już nie działa, ponieważ jej próba aby uruchomić {[2] } na object, zamiast case class.

Czy istnieje sposób na odzyskanie case class z Person zamiast object, aby można było poprawnie wywołać tupled?

Author: Andrii Abramov, 2014-03-13

4 answers

Możesz również napisać

(Person.apply _).tupled

Aby uniknąć powtarzania typów.

 83
Author: Alexey Romanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 03:20:58

Jest to bardzo podobne do tego, co powiedział Alexey Romanov, ale aby uniknąć podnoszenia apply Kiedy tylko potrzebujesz tupled, dodajemy to do naszych obiektów towarzyszących.

object Person {
  def something = "rawr"
  def tupled = (Person.apply _).tupled
}

Teraz możesz wywołać Person.tupled tak jak gdybyś nie miał obiektu towarzyszącego.

 24
Author: Tim Gautier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-22 21:32:35

Jednym obejściem jest zdefiniowanie obiektu towarzyszącego w następujący sposób:

object Person extends((String,String) => Person) {
    ...
}
Zobacz też https://groups.google.com/d/msg/scala-user/jyWBMz5Qslw/Bryv4ftzRLgJ
 6
Author: kawty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 01:39:50

Aby bazować na innych komentarzach, możesz również wykonać następujące czynności, ponieważ tuple wywołuje wygenerowaną domyślną metodę Zastosuj dla klasy case.

object Person {
  ...
  def tupled = (this.apply _).tupled
}
 3
Author: ekrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 19:04:05