检查一个variables是否是Ruby中的一个string
还有什么比以下更习惯吗?
foo.class == String
我想你正在寻找instance_of?
。 is_a?
和kind_of?
将从派生类的实例返回true。
class X < String end foo = X.new foo.is_a? String # true foo.kind_of? String # true foo.instance_of? String # false foo.instance_of? X # true
更多的鸭子打字的方法就是说
foo.respond_to?(:to_str)
to_str
表示对象的类可能不是string的实际后代,但对象本身非常类似string(stringy?)。
你可以做:
foo.instance_of?(String)
而更一般的:
foo.kind_of?(String)
foo.instance_of? String
要么
foo.kind_of? String
如果你只关心它是否从String
某处inheritance它的inheritance链
除了其他的答案之外,Class定义了方法===来testing一个对象是否是该类的一个实例。
- o.class类的o。
- o.instance_of? c决定是否o.class == c
- o.is_a? c是c的一个实例还是它的任何子类的实例?
- o.kind_of? c是* is_a的同义词?
- c === o为类或模块,确定是否* o.is_a? c *( String ===“s”返回true)
我认为更好的方法是创build一些谓词方法。 这也将节省您的“单点控制”。
class Object def is_string? false end end class String def is_string? true end end print "test".is_string? #=> true print 1.is_string? #=> false
更多的鸭子打字方式;)