#scala #slick #currying
#scala #гладкий #каррирование
Вопрос:
Теперь уверен, как это сделать правильно, я пытаюсь сделать это:
def byId(id: Column[Int], locationId: Column[Int]) = {
for {
m <- users if m.id === id amp;amp; m.locationId == locationId
} yield m
}
val byIdCompiled = Compiled(byId _) // ???????????? how to pass second parameter?
def getById(id: Int, locationId: Int): Option[User] {
byIdCompiled(id, locationId).firstOption
}
Как мне выполнить функцию с 2 параметрами при компиляции моего скользкого запроса?
Комментарии:
1. Вы пробовали это? (Если да, то какие ошибки вы получаете?) Причина, по которой я спрашиваю, заключается в том, что, согласно документам , это уже должно просто работать.
2. Я попробую еще раз, я думаю, что я делал Compiled(byId _, _) раньше, я дал попробовать.
3. То, как вы используете _ , означает весь список параметров, а не только один параметр.
Ответ №1:
В примере, представленном в Slick docs, используется один символ подчеркивания для кодирования нескольких параметров.
http://slick.typesafe.com/doc/2.0.0/queries.html
def userNameByIDRange(min: Column[Int], max: Column[Int]) =
for {
u <- users if u.id >= min amp;amp; u.id < max
} yield u.first
val userNameByIDRangeCompiled = Compiled(userNameByIDRange _)
// The query will be compiled only once:
val names1 = userNameByIDRangeCompiled(2, 5).run
val names2 = userNameByIDRangeCompiled(1, 3).run
Комментарии:
1. Я получаю сообщение об ошибке «приложение не принимает параметры» с помощью параметров для byIdCompiled .