我看到了以下代码:
resource = controller_name.singularize.to_sym
method = "#{resource}_params"
params[resource] &&= send(method) if respond_to?(method, true)
但是我不太了解&&=
的作用。
请有人可以向我解释一下?
谢谢
答案 0 :(得分:5)
如Marek的answer中所述,a &&= b
是a = a && b
的快捷方式,就像:
a ||= b
是a = a || b
a += 1
是a = 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]
虽然未定义a
,但有一个小的区别:
a &&= b
会将a
设置为nil
但是
if a
a = b
end
将失败,并显示NameError
。
答案 1 :(得分:4)
这是一个简短而惯用的形式:
a = a && b