我正在检查一个 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??
我正在检查一个 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??
在这种特殊情况下,没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是被不当使用。在 Ruby 中,很少有东西在逻辑上是错误的,只有字面上的false和nil是。
这意味着类似if (!x.nil?)的代码几乎总是更好地表达为,除非有可能是字面if (x)的期望。xfalse
我会切换到它,||= false因为它具有相同的结果,但这在很大程度上是一个偏好问题。唯一的缺点是每次运行该行时都会发生分配,而不是.nil?测试一次。
您可以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 %>