是否有可能清楚地识别出一类变量?
类似的东西:
@users.who_r_u? #=>Class (some information)
@packs.who_r_u? #=> Array (some information)
等
有人可以清楚地解释Class,Hash,Array,Associated Array等之间的区别吗?
答案 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)
Class
和Hash
之间的差异?它们太不同甚至无法提供正常答案。 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 %>