dav*_*ers 112 ruby idioms typechecking
有什么比以下更惯用吗?
foo.class == String
Run Code Online (Sandbox Code Playgroud)
Can*_*ide 183
我想你在找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
Run Code Online (Sandbox Code Playgroud)
And*_*imm 26
可以说更多的鸭子打字方法
foo.respond_to?(:to_str)
Run Code Online (Sandbox Code Playgroud)
to_str 表示对象的类可能不是String的实际后代,但是对象本身非常像字符串(stringy?).
Fed*_*les 22
你可以做:
foo.instance_of?(String)
Run Code Online (Sandbox Code Playgroud)
更普遍的是:
foo.kind_of?(String)
Run Code Online (Sandbox Code Playgroud)
foo.instance_of? String
Run Code Online (Sandbox Code Playgroud)
要么
foo.kind_of? String
Run Code Online (Sandbox Code Playgroud)
如果你只关心它是从String它的继承链上的某个地方开始的
除了其他答案之外,还定义了测试对象是否是该类的实例的Class方法。===
o.class类o.o.instance_of? c确定是否o.class == cc === o对于类或模块,确定 if o.is_a? c( String === "s"returns true)o.is_a? c是它的o实例c还是它的任何子类?o.kind_of? c同义词is_a?