类(类型)检查

类(类型)检查

问题描述:

是否有一个好的库(最好是宝石)做类的对象检查?难点在于我不仅要检查简单对象的类型,而且还想检查数组或哈希(如果有),并检查其组件的类。举例来说,如果我有一个对象:类(类型)检查

object = [ 
    "some string", 
    4732841, 
    [ 
    "another string", 
    {:some_symbol => [1, 2, 3]} 
    ], 
] 

我希望能够检查各种层次的细节,如果有类不匹配的话,我希望它返回一些合理的方式的位置。我还没有误差(类不匹配)的格式应该是这样一个清晰的思路,但这样的事情:

object.class_check(Array) # => nil (`nil` will mean the class matches) 
object.class_check([String, Fixnum, Array]) # => nil 
object.class_check([String, Integer, Array]) # => nil 
object.class_check([String, String, Array]) # => [1] (This indicates the position of class mismatch) 
object.class_check([String, Fixnum, [Symbol, Hash]) # => [2,0] (meaning type mismatch at object[2][0]) 

如果不存在这样的库,可有人(告诉我在哪个方向我应该)执行这个?可能我应该使用kind_of?和递归定义。

下面是一些你可以开始与

class Object 
    def class_check(tclass) 
    return self.kind_of? tclass unless tclass.kind_of? Array 
    return false unless self.kind_of? Array 
    return false unless length == tclass.length 
    zip(tclass).each { | a, b | return false unless a.class_check(b) } 
    true 
    end 
end 

它将返回true如果类匹配和false否则。

指数计算丢失。

+0

我知道我对于返回值的建议没有完全指定。这就是我为什么要求提出建议的原因。 – sawa 2012-02-08 22:17:23

+0

@sawa:对不起,没有仔细阅读。 – 2012-02-08 22:19:44

is_a? or kind_of?做你在问什么......虽然你似乎已经知道(?)。

+0

我想我可能会实现它,但如果已经有类似的事情,我不想重新发明*。我对此没有那么自信。并且还希望提供关于错误格式(返回值)应该如何的建议。 – sawa 2012-02-08 22:15:10