1

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

我已经尝试了很多变种

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

但没有成功

4

4 回答 4

3

如果foo真的是nil,而不是未定义,那么(foo || []).include?(:bar)会做你想做的事,但是如果foo还没有设置任何东西,那么你会得到一个NameError,所以我们可以用更长的oneliner检查它......

defined?(foo) ? (foo || []).include?(:bar) : false
于 2012-08-28T18:39:50.657 回答
2
(foo ||= []).include?(:bar)

那会成功的。

于 2012-08-28T19:20:51.437 回答
0

也许这个?

foo.includes? :bar if foo
于 2012-08-28T18:36:31.550 回答
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 部分的视图中:

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

在第一种情况下,foo变量将[2,3,4]位于 foo 部分中。

在第二种情况下,foo变量不会被放入,local_assigns因此将按照上面的代码被赋予一个默认值。

于 2012-08-31T16:54:28.790 回答