找出Hash和Array之间的变量类和差异

时间:2012-01-06 12:39:29

标签: ruby

是否有可能清楚地识别出一类变量?

类似的东西:

@users.who_r_u? #=>Class (some information)

@packs.who_r_u? #=> Array (some information)

有人可以清楚地解释Class,Hash,Array,Associated Array等之间的区别吗?

5 个答案:

答案 0 :(得分:6)

您可以使用:

@users.class

在irb中测试:

1.9.3p0 :001 > 1.class
 => Fixnum 
1.9.3p0 :002 > "1".class
 => String
1.9.3p0 :003 > [1].class
 => Array 
1.9.3p0 :004 > {:a => 1}.class
 => Hash 
1.9.3p0 :005 > (1..10).class
 => Range 

或者:

1.9.3p0 :010 > class User
1.9.3p0 :011?>   end
 => nil 
1.9.3p0 :012 > @user = User.new
 => #<User:0x0000010111bfc8> 
1.9.3p0 :013 > @user.class
 => User 

这些只是快速的irb示例,希望它足以看到在ruby中使用.class。

答案 1 :(得分:2)

您还可以使用kind_of?来测试其接收器是类,数组还是其他任何内容。

 @users.kind_of?(Array) # => true

答案 2 :(得分:0)

ClassHash之间的差异?它们太不同甚至无法提供正常答案。 Hash基本上是一个具有唯一键的数组,其中每个键都有其关联值。这就是为什么它也被称为关联数组。

以下是一些解释:

array = [1,2,3,4]
array[0] # => 1
array[-1] # => 4
array[0..2] # => [1,2,3]
array.size # => 4

在此处查看更多Array方法:http://ruby-doc.org/core-1.9.3/Array.html

hash = {:foo => 1, :bar => 34, :baz => 22}
hash[:foo] # => 1
hash[:bar] # => 34
hash.keys # => [:baz,:foo,:bar] 
hash.values # => [34,22,1]
hash.merge :foo => 3921
hash # => {:bar => 34,:foo => 3921,:baz => 22 }

Hash永远不会保留您添加到其中的元素的顺序,它只保留键的唯一性,因此您可以轻松地检索值。

但是,如果你这样做:

 hash.merge "foo" => 12

你会得到

 hash # => {:bar => 34, baz => 22, "foo" => 12, :foo => 2}

它创建了新的键值对,因为:foo.eql? "foo"返回false

有关更多Hash方法,请查看以下内容:http://www.ruby-doc.org/core-1.9.3/Hash.html

Class对象有点太复杂,无法简单解释,但如果您想了解更多信息,请参阅一些在线教程。

请记住,API是你的朋友。

答案 3 :(得分:0)

您可以在Ruby文档http://ruby-doc.org/core-1.9.3/Object.html

中找到这些方法
@user.class => User
@user.is_a?(User) => true
@user.kind_of?(User) => true

答案 4 :(得分:0)

发现有用:<%= debug @users %>