C # vs2017 Образцы GroupItem и ItemView UWP

Совсем недавно (октябрь 2016 года, через шесть лет после OP) сообщение в блоге « Scala и 22 » из Ричарда Даллауэя исследует этот предел:

Еще в 2014 году, когда была выпущена Scala 2.11, было устранено важное ограничение:

Case classes with > 22 parameters are now allowed. 

Это может заставить вас подумать, что нет 22 ограничений в Скала, но это не так. Ограничение сохраняется в функциях и кортежах.

Исправление ( PR 2305 ), введенное в Scala 2.11, устранило ограничение для вышеуказанных общих сценариев: построение классов case, доступа к полю (включая копирование) и сопоставление с образцом ( базирующие крайние случаи ).

Это делалось, опуская unapply и tupled для классов case выше 22 полей. Другими словами, предел Function22 и Tuple22 все еще существует.

Работа над пределом (post Scala 2.11)

Существует два распространенных способа обхода этого предела.

  • Первое - использовать вложенные кортежи. Хотя верно, что кортеж не может содержать более 22 элементов, каждый элемент может быть кортежем
  • . Другим распространенным трюком является использование гетерогенных списков (HLists), где нет 22 предела.

Если вы хотите использовать классы case, вам может быть лучше использовать бесформенную реализацию HList. Мы создали библиотеку Slickless , чтобы сделать это проще. В частности недавний mappedWith метод преобразуется между бесформенными HLists и классами case. Это выглядит так:

import slick.driver.H2Driver.api._
import shapeless._
import slickless._

class LargeTable(tag: Tag) extends Table[Large](tag, "large") {
  def a = column[Int]("a")
  def b = column[Int]("b")
  def c = column[Int]("c")
  /* etc */
  def u = column[Int]("u")
  def v = column[Int]("v")
  def w = column[Int]("w")

  def * = (a :: b :: c :: /* etc */ :: u :: v :: w :: HNil)
    .mappedWith(Generic[Large])
}

В базе данных Slickless имеется полный пример с 26 столбцами .

0
задан Maria 5 March 2019 в 17:05
поделиться