如何检查ruby中的类属性?

时间:2011-06-11 16:54:05

标签: ruby-on-rails ruby

如何创建类似的方法:

def process_by_type *things

  things.each {|thing|
    case thing.type
      when String

      when Array

      when Hash

      end

    end
  }
end

我知道我可以使用kind_of?(数组)等。但我认为这样会更干净,而且我无法在Class:Object文档页面找到它的方法。

2 个答案:

答案 0 :(得分:3)

尝试.class

>> a = "12"
=> "12"
>> a.class
=> String
>> b = 42
=> 42
>> b.class
=> Fixnum

答案 1 :(得分:3)

使用case语句的形式,就像你正在做的那样:

case obj
  when expr1
    # do something
  when expr2
    # do something else
end

相当于执行一堆if expr === obj(三重等于比较)。当expr是类类型时,如果obj是 expr 的类型或 expr 的子类,则===比较返回true。

因此,以下内容应该符合您的期望:

def process_by_type *things

  things.each {|thing|
    case thing
      when String
        puts "#{thing} is a string"
      when Array
        puts "#{thing} is an array"
      when Hash
        puts "#{thing} is a hash"
      else
        puts "#{thing} is something else"
    end
  }
end