Что такое ярлык `&& =`? - PullRequest
       4

Что такое ярлык `&& =`?

1 голос
/ 17 июня 2019

Я видел этот код:

resource = controller_name.singularize.to_sym
method = "#{resource}_params"
params[resource] &&= send(method) if respond_to?(method, true)

Но я не совсем понимаю, что делает &&=.

Пожалуйста, кто-нибудь может мне это объяснить?

Спасибо

Ответы [ 2 ]

5 голосов
/ 17 июня 2019

Ярлык

Как уже упоминалось в ответе Марека , a &&= b - это сокращение для a = a && b, например:

  • a ||= b является a = a || b
  • a += 1 является a = a + 1

Значение

a = a && b в основном означает: установите a на b, только если a было определено и верно.

Альтернативы

&& иногда может использоваться вместо if. Так как в любом случае есть if, вы также можете написать:

resource = controller_name.singularize.to_sym
method = "#{resource}_params"
if respond_to?(method, true)
  if params[resource]
    params[resource] = send(method)
  end
end

или короче:

resource = controller_name.singularize.to_sym
method = "#{resource}_params"
if respond_to?(method, true) && params[resource]
  params[resource] = send(method)
end

или

resource = controller_name.singularize.to_sym
method = "#{resource}_params"
params[resource] = send(method) if respond_to?(method, true) && params[resource]

Попался

Существует небольшая разница, хотя a не определено:

a &&= b установит a в nil

но

if a
  a = b
end

потерпит неудачу с NameError.

4 голосов
/ 17 июня 2019

Это короткая и идиоматическая форма:

a = a && b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...