Ruby 类别(类型)检查

Ruby 类别(类型)检查,ruby,class,ruby-1.9.3,Ruby,Class,Ruby 1.9.3,是否有一个好的库(最好是gem)用于对象的类检查?困难的部分是,我不仅要检查简单对象的类型,还要检查数组或散列(如果有的话)的内部,并检查其组件的类。例如,如果我有一个对象: object = [ "some string", 4732841, [ "another string", {:some_symbol => [1, 2, 3]} ], ] 我希望能够检查不同级别的细节,如果存在类不匹配,那么我希望它以某种合理的方式返回位置。我还不清楚错误(类不匹

是否有一个好的库(最好是gem)用于对象的类检查?困难的部分是,我不仅要检查简单对象的类型,还要检查数组或散列(如果有的话)的内部,并检查其组件的类。例如,如果我有一个对象:

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])

如果没有这样的库,有人能(告诉我应该朝哪个方向)实现这一点吗?也许,我应该使用
类?
和递归定义。

按你的要求做。。。虽然你似乎已经知道(?)

这里有一些你可以开始的东西

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


指数计算缺失。

我想我可能能够实现它,但如果已经有类似的东西,我不想重新发明轮子。我对此不太有信心。我还想知道错误格式(返回值)应该如何。我知道我对返回值的建议没有完全指定。这就是为什么我要征求关于它的建议。