如何创建类似的方法:
def process_by_type *things
things.each {|thing|
case thing.type
when String
when Array
when Hash
end
end
}
end
我知道我可以使用kind_of?(数组)等。但我认为这样会更干净,而且我无法在Class:Object文档页面找到它的方法。
答案 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