Как работают эти методы в контроллерах, активы в js? - PullRequest
0 голосов
/ 12 января 2020

У меня есть этот пример
И я хочу понять, что это за «|| =» в этом методе? Как это работает?

Первый сегмент

 def current_user
            @current_user ||= User.find(session[:user_id]) if session[:user_id]
          end

Кроме того, я не знаю, что означает (function ()) в Ruby на рельсах. Это не простая функция (), почему она заключена в скобки?

Второй пример

(function() {
  this.App || (this.App = {});

  App.cable = ActionCable.createConsumer();

}).call(this);

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Если вы подумаете о других операторах, вам будет легче увидеть, что делает 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
0 голосов
/ 25 апреля 2020

||= эквивалентно

@current_user || @current_user = User.find(session[:user_id]) if session[:user_id]

Значение, если @current_user равно нулю или ложно, установить @current_user в значение User.find(session[:user_id]) в случае, если session[:user_id]

Второй пример - не Ruby на Rails, а JavaScript. Это так называемые «выражения немедленно вызванных функций», и он заключен в круглые скобки, чтобы вы могли вызывать его с указанным параметром c, в вашем случае this. Так что this внутри IIFE имеет контекст где этот IIFF назывался.

...