5

是否有一个好的库(最好是 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])

如果没有这样的库,有人可以(告诉我我应该朝哪个方向)实现这个吗?可能,我应该使用kind_of?递归定义。

4

2 回答 2

11

is_a?或者kind_of?做你要求的......虽然你似乎已经知道了(?)。

于 2012-02-08T22:13:03.153 回答
10

这是你可以开始的东西

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否则它将返回。

缺少指数的计算。

于 2012-02-08T22:14:22.003 回答