Прежде чем использовать метод passes()
, вам необходимо войти в систему, иначе auth()->user()
будет нулевым. Вы можете сделать это, используя метод be($user)
следующим образом:
/** @test */
public function current_password_must_be_valid()
{
$rule = new CurrentPassword();
$user = factory(User::class)->create(['password' => '1234']);
$this->be($user);
$this->assertTrue($rule->passes('current_password','1234'), $user->password);
}
Также было бы целесообразно принять меры против значений null
в вашем методе passes()
, чтобы избежать ошибок. Если пользователь не вошел в систему, вероятно, он просто должен вернуть false
.
(apply '+ (delq nil (mapcar (lambda (x) (and (= 1 (% x 2)) x)) '(1 2 3 4 5))))
Идиоматический способ сделать это состоит в том, чтобы использовать функции и макросы в cl
пакеты. Они стали стандартом с Lisp Emacs и нет ничего неправильно с использованием их.
Я сомневаюсь, что Вы найдете способ сделать это, это так же кратко и ясно как
(loop for x in list if (oddp x) sum x)
Существуют более функциональные способы сделать это, такой как
(apply #'+ (remove-if-not #'oddp list))
но это использует remove-if-not
который является от cl-seq
пакет. Вы могли выписать цикл вручную:
(let ((sum 0)) (dolist (x list sum) (when (oddp x) (incf sum x))))
но это использует dolist
и incf
которые находятся оба в cl-macs
пакет. В основном Вы не можете выйти cl
пакет: oddp
самостоятельно a cl
функционируйте!
Мои максимальные усилия, не используя абсолютно никакой cl
средства - это:
(apply #'+ (mapcar (lambda (x) (* x (mod x 2))) list))
но это было бы абсурдный для использования этого на практике вместо (loop ...)
версия.