我的几个部分可以用两种“模式”渲染。如果full_display
为false
,则不会渲染多个字段。为了方便起见,我想让其中一个“模式”默认 - 如果未定义full_display
,则将其视为false
。我想出了这段代码:
(((not defined?(full_display).nil?) && full_display) || false)
四处走动很多。将它放在帮助器或其他东西中会很好,但由于Ruby只有词法范围,所以我想不出任何好的方法。
我已经尝试过的坏主意:
<% display = long code that is above %>
的顶部,并通过代码使用显示,但在视图中创建局部变量看起来很糟糕,必须使用full_display
将其复制到每个部分中。答案 0 :(得分:2)
这是一种非常复杂的说法,如:
defined?(full_display) && full_display
在Ruby中有两个非真值的值,nil
和false
,所有其他值都为true,其中包括0,空字符串等,否则将在其中评估为false Perl,PHP和C. .nil?
的测试通常保留用于那些你想要区分false
和未定义的罕见情况,有时这种情况就是布尔字段,其中缺失值不同来自虚假的价值。
在任何情况下,在视图空间中使用or-equals运算符||=
分配默认值要容易得多:
<% full_display ||= false %>
这相当于full_display = full_display || false
。这样做有两件事。首先,它定义了full_display
变量,即使它之前没有创建过,其次它确保它包含一个至少为false
的值,永远不会定义。
你会在Ruby代码中看到很多||= default
模式,因为它是一种简单的方法来分配某些东西,否则它将是nil
。