我正在检查Rails项目。在一个ERuby HTML模板页面上,我看到了几行:
<% option_1 = false if option_1.nil? %>
<% option_2 = false if option_2.nil? %>
<% option_3 = false if option_3.nil? %>
我无法理解为什么它不是这样写的:
<% option_1 ||= false %>
在这种情况下||=
和if nil?
有什么区别?
答案 0 :(得分:7)
在这种特殊情况下,没有区别,但这可能是出于习惯。每当我看到nil?
被使用时,它几乎总是被不恰当地使用。在Ruby中,很少有东西在逻辑上是错误的,只有文字false
和nil
。
这意味着像if (!x.nil?)
这样的代码几乎总是更好地表达为if (x)
,除非期望x
可能是文字false
。
我将其切换为||= false
,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是,每次运行该行时都会进行赋值,而不是使用.nil?
测试运行一次。
答案 1 :(得分:1)
您可以在视图中使用local_assigns
来引用局部变量,而不会导致NameError
,而不是定义缺少的局部变量。
所以而不是:
<% option_1 ||= false %>
<% option_2 ||= false %>
<% option_3 ||= false %>
<% if option_1 %>
...
<% end %>
<% if option_2 %>
...
<% end %>
你有:
<% if local_assigns[:option_1] %>
...
<% end %>
<% if local_assigns[:option_2] %>
...
<% end %>