`包含?`在一个可能没有分配的数组中

时间:2012-08-28 18:33:47

标签: ruby arrays

如果可能没有分配它正在搜索的数组,是否有使用include的单行方式?

我尝试了很多

的变体
(foo || []).include?(:bar)

但没有成功

4 个答案:

答案 0 :(得分:3)

如果foo确实是nil,而不是未定义,那么(foo || []).include?(:bar)将会执行您想要的操作,但如果foo未设置为任何内容,那么您将获得NameError,以便我们可以使用更长的oneliner来检查...

defined?(foo) ? (foo || []).include?(:bar) : false

答案 1 :(得分:2)

(foo ||= []).include?(:bar)

这样就可以了。

答案 2 :(得分:0)

也许这个?

foo.includes? :bar if foo

答案 3 :(得分:0)

由于您使用的是部分内容,请将其置于部分内容之上:

<% foo = [] unless local_assigns.has_key?(:foo) # for Arrays %>
<% foo = {} unless local_assigns.has_key?(:foo) # for Hashes %>
<% foo = "" unless local_assigns.has_key?(:foo) # for Strings %>

这是检查部分中使用的变量是否已设置的正确方法。

在使用foo partial的视图中:

 <% render :partial => "foo", :locals {:a => 1, :foo => [2, 3, 4]} %>
 <% render :partial => "foo", :locals {:a => 1} %>

在第一种情况下,foo partial中的foo变量为[2,3,4]

在第二种情况下,foo变量不会放在local_assigns中,因此将根据上面的代码给出默认值。