Я пытаюсь обобщить настройку Squeryl (Slick создает те же проблемы AFAIK). Я хочу, чтобы я не указывал каждый класс case явно для ряда общих методов.Scala Макросы, генерирующие вызовы параметров типа
table[Person]
table[Bookmark]
etc.
Это также идет для создания индексов и создания методов обертки методов CRUD для каждого случай класса.
Так в идеале, что я хочу сделать, это список классов и сделать их в виде таблиц, добавить индексы и добавить метод обертку:
val listOfClasses = List(classOf[Person], classOf[Bookmark])
listOfClasses.foreach(clazz => {
val tbl = table[clazz]
tbl.id is indexed
etc.
})
Я думал, что Scala Макросы бы вещь, чтобы применить здесь, так как я не думаю, что вы можете иметь значения как параметры типа. Кроме того, мне нужно генерировать методы для каждого типа формы:
def insert(model: Person): Person = persons.insert(model)
Я получил мой МИТС на примере на макросах, но я не знаю, как создать родовую структуру данных.
Я получил этот простой пример, чтобы проиллюстрировать то, что я хочу:
def makeList_impl(c: Context)(clazz: c.Expr[Class[_]]): c.Expr[Unit] = {
import c.universe._
reify {
println(List[clazz.splice]()) // ERROR: error: type splice is not a member of c.Expr[Class[_]]
}
}
def makeList(clazz: Class[_]): Unit = macro makeList_impl
Как мне это сделать? Или Scala Macros - неправильный инструмент?
Aha! Спасибо за ответ. Я пробежал по q.«нотация, но не могла найти никакой документации. Это именно то, что я хочу, чтобы она сделала. Спасибо! –