Кто-нибудь знает, как я могу уменьшить дублирование в утверждении соответствия шаблонов в следующей функции? в частности, я хочу обобщить оператор if. Я думаю, если бы я мог каким-то образом передать свойства объекта в функцию, тогда я мог бы это сделать, но я понятия не имею, как это сделать. Буду признателен за любую оказанную помощь. БЛАГОДАРЯ!!Как реорганизовать следующую функцию для уменьшения дублирования? Slick, Pattern Matching, Play Framework
Ex: if (ASC) _.uid.asc else _.uid.desc
Ниже функция
/**
* Finds all the users and sorts by column ascending or descending. Ascending or Descending is determined by
* if the orderBy value is positive or negative. These values are held in constants in @package models.AdminPage
* @param orderBy The column to be sorted.
* @return a list of sorted users.
*/
def findAll(orderBy: Int = DefaultSortByUid) = DB.withSession {
implicit s: Session =>
val q = for(u <- User) yield u
// Get the absolute value to determine the column to be sorted. A valid value will be an Int that corresponds
// to one of the constants defined in @package models.AdminPage.
val sortByColumn = orderBy.abs
val ASC = orderBy > 0
val users = q.sortBy(sortByColumn match {
case `SortByUid` => if (ASC) _.uid.asc else _.uid.desc
case `SortByUserName` => if(ASC) _.userId.asc else _.userId.desc
case `SortByAuthMethod` => if(ASC) _.authMethod.asc else _.authMethod.desc
case `SortByRole` => if(ASC) _.role.asc else _.role.desc
case `SortByEmail` => if(ASC) _.email.asc else _.email.desc
case `SortByFirstName` => if(ASC) _.firstName.asc else _.firstName.desc
case `SortByLastName` => if(ASC) _.lastName.asc else _.lastName.desc
//An invalid value just goes to table main page and to default sort of ascending by uid
case _ => _.uid.asc
}).list
users
}
Да, это то, что я пытался сделать, но я понятия не имею, какой тип _.uid есть и как передать его в функцию. Вот где я застрял. – danielbh
@ danielh Похоже, вы уже поняли, что тип будет столбцом [T] – leipie