什么是&& =快捷方式?

esc*_*nxr 1 ruby

我看到了以下代码:

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

但是我真的不明白是什么&&=

请有人可以向我解释吗?

谢谢

Eri*_*nil 5

捷径

正如Marek的回答中所述a &&= b是的快捷方式a = a && b,就像:

  • a ||= ba = a || b
  • a += 1a = a + 1

含义

a = a && b基本上是指:仅在定义且真实的情况下设置a为。ba

备择方案

&&有时可以代替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
Run Code Online (Sandbox Code Playgroud)

或更短:

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

要么

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

Gotcha

虽然a未定义,但有一个小的区别:

a &&= b将设置anil

if a
  a = b
end
Run Code Online (Sandbox Code Playgroud)

将以失败NameError