Почему этот кодовый блок выполняется после Rails.cache.fetch - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть эта строка кода, которая выполняет именно то, что я хочу.Но я понятия не имею, почему это работает.

  Rails.cache.fetch(key, expires_in: 1.day) do
    a << b
  end

Что предполагается сделать, это добавить b к a, если ключ не существует в кеше Rails.

Почему я в замешательстве?

      Rails.cache.fetch(key, expires_in: 1.day)

возвращает ноль, независимо от того, был ли ключ уже в кеше.

вопрос: почему блок кода запускается, когда в кеше нет ключа, но иначе не работает?

Дополнительные сведения: кеш Rails подключен к Redis.

1 Ответ

0 голосов
/ 16 ноября 2018

Может быть странно, что блок do ... end вычисляется, хотя Rails.cache.fetch возвращает nil.Но блок do ... end не выполняется поверх ответа nil.

Фактически, блок do ... end является дополнительным аргументом для вызова метода fetch.Взгляните на исходный код fetch.

Без блока fetch в основном делает только одно - вызывает read(name, options) в строке 328. Но с блоком это намного больше (строки с 307 по 324)

...