Ruby - 测试数组

时间:2009-10-06 20:21:08

标签: ruby syntax

正确的方法是:

is_array("something") # => false         (or 1)

is_array(["something", "else"]) # => true  (or > 1)

或获取其中的项目数?

7 个答案:

答案 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

请注意,虽然sizelengthcount都适用于数组,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">&nbsp;&nbsp; <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">&nbsp;&nbsp;30 West Street</span>, <span itemprop="addressLocality">Yarmouth</span>, <span itemprop="addressRegion">Kent</span>, <span itemprop="postalCode">PQ10 4TG</span> </div>&nbsp;&nbsp; <strong>Type: </strong>Hotel </div>。来自Ruby Community Style Guide

  

交易时使用Array()而不是显式数组检查或[* var]   使用您想要视为数组的变量,但您不确定   这是一个数组。

Array()