类(类型)检查
问题描述:
是否有一个好的库(最好是宝石)做类的对象检查?难点在于我不仅要检查简单对象的类型,而且还想检查数组或哈希(如果有),并检查其组件的类。举例来说,如果我有一个对象:类(类型)检查
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
否则。
指数计算丢失。
答
is_a?
or kind_of?
做你在问什么......虽然你似乎已经知道(?)。
+0
我想我可能会实现它,但如果已经有类似的事情,我不想重新发明*。我对此没有那么自信。并且还希望提供关于错误格式(返回值)应该如何的建议。 – sawa 2012-02-08 22:15:10
我知道我对于返回值的建议没有完全指定。这就是我为什么要求提出建议的原因。 – sawa 2012-02-08 22:17:23
@sawa:对不起,没有仔细阅读。 – 2012-02-08 22:19:44