Если вы подумаете о других операторах, вам будет легче увидеть, что делает memoize
.
Когда мы делаем @var += 1
, мы в основном говорим @var = @var + 1
. То же самое для других операторов:
@var -= 1
=> @var = @var - 1
@var ||= 1
=> @var = @var || 1
Это означает, что, если @var установлен, он не меняет свой value, но если @var равен nil, он установит значение в соответствии с указанным вами значением. Он работает как кеш, если есть значение, используйте его, но если его нет, установите новое значение и используйте его.
Попробуйте это на терминале:
[1] pry(main)> var ||= 10
=> 10
[2] pry(main)> var ||= 20
=> 10
[3] pry(main)> var = nil
=> nil
[4] pry(main)> var ||= 20
=> 20