什么是“ && =”快捷方式?

时间:2019-06-17 10:05:10

标签: ruby

我看到了以下代码:

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

但是我不太了解&&=的作用。

请有人可以向我解释一下?

谢谢

2 个答案:

答案 0 :(得分:5)

快捷方式

如Marek的answer中所述,a &&= ba = a && b的快捷方式,就像:

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

含义

a = a && b的基本含义是:仅在a被定义且真实的情况下,才能将b设置为a

替代项

&&有时可以be used instead of an 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]

Gotcha

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

a &&= b会将a设置为nil

但是

if a
  a = b
end

将失败,并显示NameError

答案 1 :(得分:4)

这是一个简短而惯用的形式:

a = a && b