我看到了以下代码:
resource = controller_name.singularize.to_sym
method = "#{resource}_params"
params[resource] &&= send(method) if respond_to?(method, true)
Run Code Online (Sandbox Code Playgroud)
但是我真的不明白是什么&&=。
请有人可以向我解释吗?
谢谢
正如Marek的回答中所述,a &&= b是的快捷方式a = a && b,就像:
a ||= b 是 a = a || ba += 1 是 a = a + 1a = 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)
虽然a未定义,但有一个小的区别:
a &&= b将设置a为nil
但
if a
a = b
end
Run Code Online (Sandbox Code Playgroud)
将以失败NameError。