Выражение if-else в slick run, обновите метод scala функцией - PullRequest
1 голос
/ 28 июня 2019

Я хочу проверить с помощью оператора if-else, если переменная newPsInfo.clearedCanLoadSC

это правда, тогда я хочу сделать отметку времени сегодня еще какой-нибудь другой даты поэтому я попробовал

ternary if-else with 
condition? true : false

newPsInfo.clearedCanLoadSc.equals(true) ? 
LocalDate.now() : LocalDate.of(2000,1,1)

но, к сожалению, не работает

Сначала я .filter по _.id, затем я .map результаты по классу productSettingsTable на новые обновленные значения нового параметра productSettingsInfo. Поэтому мой вопрос заключается в том, могу ли я вставить оператор if - else в методы .map или .update, например:

    newPsInfo.clearedCanLoadSc.equals(true) ? 
    LocalDate.now() : LocalDate.of(2000,1,1))
def update(employer: Employer, newPsInfo: PsInfo): Future[Int] =

    db.run(
      productSettingsQuery.filter(_.employerId === employer.id).map(productSettings =>
        (productSettings.enableSc, productSettings.enableConversion,
          productSettings.enableRefundDays, productSettings.enableOutOfPocketPayment,
          productSettings.clearedCanLoadSc, productSettings.enableL, productSettings.clearedAt)).
     update((newPsInfo.enableSc, newPsInfo.enableConversion,
          newPsInfo.enableRefundDays, newPsInfo.enableOutOfPocketPayment,
          newPsInfo.clearedCanLoadSc, newPsInfo.enableL,newPsInfo.clearedCanLoadSc.equals(true) ? LocalDate.now() : LocalDate.of(2000,1,1)))
    )

Проблема в том, что мое предложение if else не работает, Intelli-J показывает ошибки. Не удается разрешить символы?

Так есть ли способ вставить оператор if-else в функцию .map или .update?

1 Ответ

3 голосов
/ 28 июня 2019

У Scala нет условного условного оператора.Вместо этого просто используйте выражение if-else, например, так:

if (newPsInfo.clearedCanLoadSc) LocalDate.now() else LocalDate.of(2000,1,1)

Обратите внимание, что выражение if действительно является выражением , которое оценивает значение, а не управляющую структуру, например

val x: String = if (true) "foo" else "bar"
x // res0: String = foo

Обращаясь к комментарию, управляющие структуры являются такими конструкциями, как цикл while или условные операторы if-then, и их целью является изменение потока управления программой на основе некоторого состояния программы.Очевидно, что в Scala они есть, но мы говорим, что они являются выражениями , поскольку они не только изменяют поток выполнения, но и оценивают значение .Сравните это с оператором if в Java:

String x = if (true) "foo" else "bar";

, что приводит к ошибке

error: illegal start of expression
String x = if (true) "foo" else "bar";

Обратите внимание, что мы не можем оценить его и присвоить переменной x.

...