Как скомпилировать запрос с 2 параметрами

#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 .