正确的方法是:
is_array("something") # => false (or 1)
is_array(["something", "else"]) # => true (or > 1)
或获取其中的项目数?
答案 0 :(得分:486)
您可能想要使用kind_of?()
。
>> s = "something"
=> "something"
>> s.kind_of?(Array)
=> false
>> s = ["something", "else"]
=> ["something", "else"]
>> s.kind_of?(Array)
=> true
答案 1 :(得分:141)
你确定需要成为一个数组吗?您可以使用respond_to?(method)
,这样您的代码就可以用于类似的事情,这些事情不一定是数组(也许是其他一些无法理解的事情)。如果您确实需要array
,那么描述Array#kind\_of?
方法的帖子最好。
['hello'].respond_to?('each')
答案 2 :(得分:54)
而不是测试Array,
只是将您获得的任何内容转换为单级Array,
,因此您的代码只需处理一个案例。
t = [*something] # or...
t = Array(something) # or...
def f *x
...
end
Ruby有各种方法来协调可以接受对象或对象数组的API,所以,猜测为什么你想知道是某个数组的原因,我有一个建议
splat 运算符包含大量魔法you can look up,,或者您可以调用Array(something)
,如果需要,可以添加数组包装器。在这种情况下,它与[*something]
类似。
def f x
p Array(x).inspect
p [*x].inspect
end
f 1 # => "[1]"
f [1] # => "[1]"
f [1,2] # => "[1, 2]"
或者,您可以在参数声明中使用 splat ,然后使用.flatten
,为您提供不同类型的收集器。 (就此而言,您也可以在上面调用.flatten
。)
def f *x
p x.flatten.inspect
end # => nil
f 1 # => "[1]"
f 1,2 # => "[1, 2]"
f [1] # => "[1]"
f [1,2] # => "[1, 2]"
f [1,2],3,4 # => "[1, 2, 3, 4]"
并且,感谢gregschlom,使用Array(x)
有时会更快,因为当它已经是Array
时,它不需要创建新对象。
答案 3 :(得分:16)
[1,2,3].is_a? Array
评估为真。
答案 4 :(得分:12)
这听起来像是在追求具有某些物品概念的东西。因此,我建议看看它是Enumerable
。这也保证了#count
的存在。
例如,
[1,2,3].is_a? Enumerable
[1,2,3].count
请注意,虽然size
,length
和count
都适用于数组,count
在这里是正确的意思 - (例如,'abc'.length
和'abc'.size
两者都有效,但'abc'.count
不起作用。)
警告:字符串is_a?可能,也许这不是你想要的......取决于你对像对象这样的数组的概念。
答案 5 :(得分:8)
尝试:
def is_array(a)
a.class == Array
end
编辑:另一个答案比我好得多。
答案 6 :(得分:5)
另请考虑使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div itemscope itemtype="http://schema.org/Organization">
<a href="http://www.google.com" rel="nofollow">
<strong>
<font size="" color="#404040">
<span itemprop="name">The Yarmouth Inn</span>
</font>
</strong></a>
<div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress"> 30 West Street</span>,
<span itemprop="addressLocality">Yarmouth</span>,
<span itemprop="addressRegion">Kent</span>,
<span itemprop="postalCode">PQ10 4TG</span>
</div>
<strong>Type: </strong>Hotel
</div>
。来自Ruby Community Style Guide:
交易时使用Array()而不是显式数组检查或[* var] 使用您想要视为数组的变量,但您不确定 这是一个数组。
Array()