在Ruby中检查变量是否为字符串

kcrjzv8t  于 2023-04-05  发布在  Ruby
关注(0)|答案(6)|浏览(155)

还有什么比下面这句话更地道的吗?

foo.class == String
kfgdxczn

kfgdxczn1#

我认为你正在寻找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
guicsvcw

guicsvcw2#

一个更像鸭子打字的方法是说

foo.respond_to?(:to_str)

to_str表示对象的类可能不是String的实际后代,但对象本身非常类似于String(stringy?)。

nbewdwxp

nbewdwxp3#

您可以:

foo.instance_of?(String)

更一般的是:

foo.kind_of?(String)
wkyowqbh

wkyowqbh4#

foo.instance_of? String

foo.kind_of? String

如果您只关心它是否是从String继承链的某个位置派生而来

x4shl7ld

x4shl7ld5#

除了其他答案,Class定义了===方法来测试一个对象是否是该类的示例。

  • oo.class类。
  • o.instance_of? c确定o.class == c是否
  • c === o对于类或模块,确定是否为o.is_a? cString === "s"返回true
  • o.is_a? coc或它的任何子类的示例吗?
  • is_a?的同义词
1yjd4xko

1yjd4xko6#

我认为更好的方法是创建一些 predicate 方法。这也将保存您的“单点控制”。

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

更鸭子打字方式;)

相关问题